我很难理解如何引用、取消引用、准引用。。。在R工作。在这种情况下,我想拟合一个线性模型。我认为通常您不需要引用lm
-调用的输入。
所以我想做这样的事情:
names(mtcars)
y = "mpg" # response
x = "hp" # predictor
fml = y ~ x
lm(fml, data=mtcars)
但显然,这并不像字面上的";y";以及";x〃;在公式中传递。我尝试了expr()
和eval()
的几种方法,但我认为我的方法不对。阅读高级R中关于元编程的章节肯定会有很大帮助,但也许还有一个";直观的";解决方案。
对于lm
,您不需要引用/取消引用。可以使用as.formula
或reformulate
来构造公式。
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)