这是我偶然发现的问题的一种最小示例:
mylm <- function(formula,data,subset=NULL){
mysubset <- subset # some other clever manipulation
lm(formula,data,mysubset)
}
mydata <- data.frame(x=rnorm(10),y=rnorm(10))
mylm(y~x,mydata) # this fails!
最后一行失败的原因是,它lm
包含对 的调用model.frame
,它在 中进行评估parent.frame
,即lm
包含代码行
mf <- eval(mf, parent.frame())
右侧mf
的 是对 的巧妙构造的调用model.frame
。我正在传递mysubset
,但eval
在基本环境中寻找它(我相信,但如果我错了请纠正我)并没有找到它。我知道我可能会使用lm.fit
,但是有没有办法mylm
在parent.frame
for里面制作环境lm
?