我构建了一个函数f
,它运行anova,给定一个x
和y
变量。我使用NSE使函数更容易使用。下面是一个可复制的示例,它隔离了问题:
library(carData)
df <- carData::Salaries
f <- function(x,y, data){
x <- ensym(x)
y <- ensym(y)
m <- aov(glm(data[[y]] ~ data[[x]], family='gaussian',data=data))
print(summary(m))
}
字符串
输出:
> f(rank, salary, df )
Df Sum Sq Mean Sq F value Pr(>F)
data[[x]] 2 1.432e+11 7.162e+10 128.2 <2e-16 ***
Residuals 394 2.201e+11 5.586e+08
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
型
功能工作,太棒了!但是输出显示变量名为data[[x]]
。我想更改与输入匹配的变量名。
我已经将x
转换为一个字符,如:
x_string <- as.character(x)
型
但是我不知道在glm
中哪里可以修改变量名。
谢谢你的任何建议!
2条答案
按热度按时间kxkpmulp1#
你可以把你的用户定义函数缩短一点,使用
substitute(y ~ x)
:字符串
xytpbqjk2#
碱基R也完全能够进行NSE,在这种情况下不需要
ensym
。使用deparse(substitute(.))
技巧将变量作为字符串获取,并将回归公式项与基函数reformulate
放在一起。此外,函数的返回值(总是)是最后一条指令的返回值,在本例中为
print
。如果启用了自动打印(默认情况下),则无需显式调用它,summary
将单独完成这项工作。字符串
创建于2023-07-19,使用reprex v2.0.2