这里是我偶然发现了一个问题,是一种最小的例子:模型拟合函数和environemnts
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
为lm
?