r - 将函数参数传递给公式

标签 r

我试图理解为什么

foo = function(d,y,x) {
    fit = with(d, lm(y ~ x))
}
foo(myData, Y, X)

不起作用,例如在哪里

myData = data.frame(Y=rnorm(50), X=runif(50))

对我来说,棘手的一点是将参数 xy 传递给公式,如 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")

这种方法有点脆弱,例如如果您通过另一个函数传递参数。此外,让公式的“Call”部分读取 Y~X 需要更多技巧......

关于r - 将函数参数传递给公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25755528/

相关文章:

r - 如何防止 blogdown 重新呈现所有帖子?

r - dplyr 0.5 : arrange() using groupings

r - 求每分钟一个数字的平均值

r - 将两个数据框合并为一个,其中条目被串联

python - Python 中有类似于 R 中的 quantstrat 的东西吗?

R - 如果某个列是统一的或包含不同的因子值,则按组指示

c++ - 转换 Rcpp NumericMatrix 以与 Boost Geometry 一起使用

r - 如何用不同程度的栅格创建栅格砖?

r - 对R中的xlim/ylim行为感到困惑

r - 如何反转R中的数字