我正在编写一个需要加权回归的函数。我一直在使用 weights 参数时遇到错误,我创建了一个最小的可重现示例,您可以在此处找到:
wt_reg <- function(form, data, wts) {
lm(formula = as.formula(form), data = data,
weights = wts)
}
wt_reg(mpg ~ cyl, data = mtcars, wts = 1:nrow(mtcars))
这返回
eval 中的错误(extras、data、env):找不到对象“wts”
如果你单独运行这一切,它工作正常。我已经深入研究了 lm,看来问题是对eval(mf, parent.frame())
. 即使 wts 在 parent.frame() 中,它似乎也没有在调用中正确评估。这里有更多细节:
分配 mf 使其与
stats::model.frame(formula = as.formula(form), data = data, weights = wts,
drop.unused.levels = TRUE)
当我跑
parent.frame()$wts
它确实返回一个数字向量。但是当我跑步时
eval(stats::model.frame(formula = as.formula(form), data = data, weights = wts,
drop.unused.levels = TRUE), parent.frame())
它没有。
我可以跑
stats::model.frame(formula = as.formula(parent.frame()$form),
data = parent.frame()$data, weights = parent.frame()$wts,
drop.unused.levels = TRUE)
它有效。如果您想使用顶部的示例,您可以自己测试。
有什么想法吗?我真的不知道这里发生了什么......