- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今天我在 R 代码中发现了一个奇怪的行为。我尝试了一个包 {boot.StepAIC},其中包含一个用于 AIC 逐步回归结果的引导函数。不过,我不认为统计背景是问题所在(我希望如此)。
我可以在 R 的顶层使用该函数。这是我的示例代码。
require(MASS)
require(boot.StepAIC)
n<-100
x<-rnorm(n); y<-rnorm(n,sd=2); z<-rnorm(n,sd=3); res<-x+y+z+rnorm(n,sd=0.1)
dat.test<-as.data.frame(cbind(x,y,z,res))
form.1<-as.formula(res~x+y+z)
boot.stepAIC(lm(form.1, dat.test),dat.test) # should be OK - works at me
但是,我想将其包装在一个自己的函数中。我将数据和公式传递给该函数。但我在 boot.stepAIC() 中收到一个错误:
the model fit failed in 100 bootstrap samples Error in strsplit(nam.vars, ":") : non-character argument
# custom function
fun.boot.lm.stepAIC<-function(dat,form) {
if(!inherits(form, "formula")) stop("No formula given")
fit.lm<-lm(formula=form,data=dat)
return(boot.stepAIC(object=fit.lm,data=dat))
}
fun.boot.lm.stepAIC(dat=dat.test,form=form.1)
# results in an error
那么问题出在哪里呢?我想这一定与本地和全局环境有关,不是吗?
最佳答案
使用do.call
,如anova test fails on lme fits created with pasted formula给出了答案。
boot.stepAIC
在函数内运行时无法访问 form
;可以在这样的全局环境中重新创建;我们看到 lm
使用 form.1
作为公式,删除它会使 boot.stepAIC
失败。
> form.1<-as.formula(res~x+y+z)
> mm <- lm(form.1, dat.test)
> mm$call
lm(formula = form.1, data = dat.test)
> rm(form.1)
> boot.stepAIC(mm,dat.test)
# same error as OP
使用do.call
确实有效。这里我也使用 as.name
;否则 mm
对象携带整个数据集而不仅仅是它的名称。
> form.1<-as.formula(res~x+y+z)
> mm <- do.call("lm", list(form.1, data=as.name("dat.test")))
> mm$call
lm(formula = res ~ x + y + z, data = dat.test)
> rm(form.1)
> boot.stepAIC(mm,dat.test)
要将其应用于原始问题,我会这样做:
fun.boot.lm.stepAIC<-function(dat,form) {
if(!inherits(form, "formula")) stop("No formula given")
mm <- do.call("lm", list(form, data=as.name(dat)))
do.call("boot.stepAIC", list(mm,data=as.name(dat)))
}
form.1<-as.formula(res~x+y+z)
fun.boot.lm.stepAIC(dat="dat.test",form=form1)
这也有效,但整个数据集都包含在最终输出对象中,并且最终输出到控制台。
fun.boot.lm.stepAIC<-function(dat,form) {
if(!inherits(form, "formula")) stop("No formula given")
mm <- do.call("lm", list(form, data=dat))
boot.stepAIC(mm,data=dat)
}
form.1<-as.formula(res~x+y+z)
fun.boot.lm.stepAIC(dat=dat.test,form=form.1)
关于r - 函数可以工作( boot.stepAIC ),但在另一个函数中抛出错误 - 环境问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176524/
这是来自 ?lm 的一个非常简单的 lm 模型 ctl 46.17468 (LL1 -20.08824 (df=3) 从第一性原理重构: n -20.08828 这有点不对劲,还没发现毛病。 参
我有一个关于 R 前向选择的快速问题。所以我有一个我用 glm 训练过的 30 个变量的列表。 model1 = glm(eggs ~ ., data = traindata1, family =
我一直在努力执行这种分析和 posted on the stats site关于我是否在朝着正确的方向前进,但在我一直在调查的过程中,我还发现我可爱的强大处理器(linux OS,i7)实际上只使用了
今天我在 R 代码中发现了一个奇怪的行为。我尝试了一个包 {boot.StepAIC},其中包含一个用于 AIC 逐步回归结果的引导函数。不过,我不认为统计背景是问题所在(我希望如此)。 我可以在 R
MASS::stepAIC函数需要一个 lm结果作为参数并逐步回归以找到“最佳”模型。以下代码非常简单且有效: library(MASS) data("mtcars") lm1 = lm(mpg ~
我是一名优秀的程序员,十分优秀!