如何引用/取消引用变量以在 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...