如何 quote/unquote 用于在 R 中构造公式的变量
How to quote/unquote variables for constructing formulas in R
我很难理解引用、取消引用、准引用...在 R 中是如何工作的。
在这种情况下,我想拟合一个线性模型。我认为通常你不需要引用 lm
-call.
的输入
所以我想做这样的事情:
names(mtcars)
y = "mpg" # response
x = "hp" # predictor
fml = y ~ x
lm(fml, data=mtcars)
但显然这不起作用,因为字面上的“y”和“x”传递给了公式。我用 expr()
和 eval()
尝试了几件事,但我认为我的方法不对。阅读有关高级 R 中的元编程的章节肯定会有很大帮助,但也许这里也有一个“直观”的解决方案。
对于 lm
,您不需要 quoting/unquoting。您可以使用 as.formula
或 reformulate
来构造公式。
lm(reformulate(y, x), data=mtcars)
但是,由于 lm
也接受可以强制转换为公式的字符串,您可以使用 paste
来得到相同的结果。
lm(paste(x, y, sep = '~'), data=mtcars)
如果您想使用 rlang
样式 quoting/unquoting,您可以使用。
y = sym("mpg")
x = sym("hp")
# alternatively
# y = expr(mpg)
# x = expr(hp)
fml = inject(!!y ~ !!x)
lm(fml, data=mtcars)
我很难理解引用、取消引用、准引用...在 R 中是如何工作的。
在这种情况下,我想拟合一个线性模型。我认为通常你不需要引用 lm
-call.
所以我想做这样的事情:
names(mtcars)
y = "mpg" # response
x = "hp" # predictor
fml = y ~ x
lm(fml, data=mtcars)
但显然这不起作用,因为字面上的“y”和“x”传递给了公式。我用 expr()
和 eval()
尝试了几件事,但我认为我的方法不对。阅读有关高级 R 中的元编程的章节肯定会有很大帮助,但也许这里也有一个“直观”的解决方案。
对于 lm
,您不需要 quoting/unquoting。您可以使用 as.formula
或 reformulate
来构造公式。
lm(reformulate(y, x), data=mtcars)
但是,由于 lm
也接受可以强制转换为公式的字符串,您可以使用 paste
来得到相同的结果。
lm(paste(x, y, sep = '~'), data=mtcars)
如果您想使用 rlang
样式 quoting/unquoting,您可以使用。
y = sym("mpg")
x = sym("hp")
# alternatively
# y = expr(mpg)
# x = expr(hp)
fml = inject(!!y ~ !!x)
lm(fml, data=mtcars)