我试图理解为什么
foo = function(d,y,x) {
fit = with(d, lm(y ~ x))
}
foo(myData, Y, X)
不起作用,例如
myData = data.frame(Y=rnorm(50), X=runif(50))
对我来说似乎棘手的一点是传递参数x
and y
到一个公式,如lm(y ~ x)
.
@DMT 的回答很好地解释了发生的事情。
如果您希望事情按预期进行,则需要克服以下障碍:
lmwrap <- function(d,y,x) {
ys <- deparse(substitute(y))
xs <- deparse(substitute(x))
f <- reformulate(xs,response=ys)
return(lm(f,data=d))
}
mydata <- data.frame(X=1:10,Y=rnorm(10))
lmwrap(mydata,Y, X)
或者,如果将列名称作为字符串而不是符号传递,则可以稍微简化。
lmwrap <- function(d,y,x) {
f <- reformulate(xs, response=ys)
return(lm(f, data=d))
}
lmwrap(mydata, "Y", "X")
这种方法会有点脆弱,例如如果您通过另一个函数传递参数。另外,读取公式的“调用”部分Y~X
需要更多的诡计...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)