【发布时间】:2021-06-01 06:06:23
【问题描述】:
我很难理解引用、取消引用、准引用...在 R 中是如何工作的。
在这种情况下,我想拟合一个线性模型。我认为通常你不需要引用lm-call 的输入。
所以我想做这样的事情:
names(mtcars)
y = "mpg" # response
x = "hp" # predictor
fml = y ~ x
lm(fml, data=mtcars)
但显然这不起作用,因为字面上的“y”和“x”是在公式中传递的。我用expr() 和eval() 尝试了几件事,但我认为我的方法不对。阅读高级 R 中的元编程章节肯定会有很大帮助,但也许这里还有一个“直观”的解决方案。
【问题讨论】:
-
y = as.name("mpg"); x = as.name("hp"); fml = eval(bquote(.(y) ~ .(x)))但是,通常最好替换为lm调用,例如eval(bquote(lm(.(y) ~ .(x)))),否则您可能会遇到范围界定问题,因为错误的环境可能与公式相关联。
标签: r metaprogramming quoting