R语言 在glm中更改变量输出名称

juzqafwq  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(99)

我构建了一个函数f,它运行anova,给定一个xy变量。我使用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中哪里可以修改变量名。
谢谢你的任何建议!

kxkpmulp

kxkpmulp1#

你可以把你的用户定义函数缩短一点,使用substitute(y ~ x)

f <- function(x, y, data){
  summary(aov(glm(substitute(y ~  x), family = 'gaussian', data = data)))
}

f(rank, salary, df)

#              Df    Sum Sq   Mean Sq F value Pr(>F)    
# rank          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

字符串

xytpbqjk

xytpbqjk2#

碱基R也完全能够进行NSE,在这种情况下不需要ensym。使用deparse(substitute(.))技巧将变量作为字符串获取,并将回归公式项与基函数reformulate放在一起。
此外,函数的返回值(总是)是最后一条指令的返回值,在本例中为print。如果启用了自动打印(默认情况下),则无需显式调用它,summary将单独完成这项工作。

df <- carData::Salaries

f <- function(x,y, data){
  x <- deparse(substitute(x))
  y <- deparse(substitute(y))
  fmla <- reformulate(x, y)
  m <- aov(glm(fmla, family='gaussian',data=data))
  summary(m)
}

f(rank, salary, df)
#>              Df    Sum Sq   Mean Sq F value Pr(>F)    
#> rank          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

字符串
创建于2023-07-19,使用reprex v2.0.2

相关问题