如何在R中引用/取消引用变量来构造公式



我很难理解如何引用、取消引用、准引用。。。在R工作。在这种情况下,我想拟合一个线性模型。我认为通常您不需要引用lm-调用的输入。

所以我想做这样的事情:

names(mtcars)
y = "mpg" # response
x = "hp" # predictor
fml = y ~ x
lm(fml, data=mtcars)

但显然,这并不像字面上的";y";以及";x〃;在公式中传递。我尝试了expr()eval()的几种方法,但我认为我的方法不对。阅读高级R中关于元编程的章节肯定会有很大帮助,但也许还有一个";直观的";解决方案。

对于lm,您不需要引用/取消引用。可以使用as.formulareformulate来构造公式。

lm(reformulate(y, x), data=mtcars)

然而,由于lm也接受可以强制到公式中的字符串,所以可以使用paste,这将给出相同的结果。

lm(paste(x, y, sep = '~'), data=mtcars)

如果您想使用rlang样式的引号/取消引号,您可以使用。

y = sym("mpg")
x = sym("hp")
# alternatively
# y = expr(mpg)
# x = expr(hp)

fml = inject(!!y ~ !!x)
lm(fml, data=mtcars)

最新更新