我意识到使用动态变量名的风险,因此我正在尝试循环遍历各种回归模型,其中选择不同的变量规范。通常情况下,!!rlang::sym()
可以很好地解决这种问题,但在回归中它会失败。一个最简示例如下:
y= runif(1000)
x1 = runif(1000)
x2 = runif(1000)
df2= data.frame(y,x1,x2)
summary(lm(y ~ x1+x2, data=df2)) ## works
var = "x1"
summary(lm(y ~ !!rlang::sym(var)) +x2, data=df2) # gives an error
我的理解是,!!rlang::sym(var))
会取出 var
的值(即 x1),并以 R 认为这是一个变量而不是字符的方式放入代码中。但我似乎是错了。有人能启发我一下吗?
formula(paste0("y", "~", var, "+x2"))
? - RLave!!rlang::sym()
没有按照我预期的方式运行。但还是感谢 @RLave。 - safexsummary(lm(expr(y ~ !!sym(var) + x2), data=df2))
。 - Dansummary(lm(y ~ eval(as.symbol(var)) + x2, data=df2))
。 - tmfmnkvar <- as.symbol(var); eval(bquote(summary(lm(y ~ .(var)+x2, data=df2))))
。请将输出中的公式与其他解决方案得到的结果进行比较。 - Roland