【发布时间】:2018-06-03 05:11:45
【问题描述】:
这是来自Error in calling `lm` in a `lapply` with `weights` argument 的后续问题,但可能不是同一个问题(但仍然相关)。
这是一个可重现的例子:
dd <- data.frame(y = rnorm(100),
x1 = rnorm(100),
x2 = rnorm(100),
x3 = rnorm(100),
x4 = rnorm(100),
wg = runif(100,1,100))
ls.form <- list(
formula(y~x1+x2),
formula(y~x3+x4),
formula(y~x1|x2|x3),
formula(y~x1+x2+x3+x4)
)
我有一个接受不同参数的函数(1- 子样本,2- weights 参数的列名,3- 要尝试的公式列表和 4- 要使用的 data.frame)
f1 <- function(samp, dat, forms, wgt){
baselm <- lm(y~x1, data = dat[samp,], weights = dat[samp,wgt])
lapply(forms, update, object = baselm)
}
如果我调用该函数,我会得到一个错误:
f1(1:66, dat = dd, forms = ls.form, wgt = "wg")
Error in is.data.frame(data) : object 'dat' not found
我真的不明白为什么它找不到dat 对象,它应该是函数环境的一部分。问题出在代码的update 部分,就像您从函数中删除这一行一样,代码可以正常工作。
最后,这个函数会被lapply调用
lapply(list(1:66, 33:99), f1, dat=dd, forms = ls.form, wgt="wg")
【问题讨论】: