我使用这个pretty nice代码执行多重t.test,保持自变量不变!
data(mtcars)
library(dplyr)
vars_to_test <- c("disp","hp","drat","wt","qsec")
iv <- "vs"
mtcars %>%
summarise_each_(
funs_(
sprintf("stats::t.test(.[%s == 0], .[%s == 1])$p.value",iv,iv)
),
vars = vars_to_test)
不幸的是,dplyr已更新,我一直在面对此报告
summarise_each()
已弃用。使用summarise_all()
, 而是summarise_at()
或summarise_if()
。将funs
映射到 选择变量,使用summarise_at()
当我更改_all,at或_if的代码时,此函数不再起作用。我正在寻求一些建议,非常感谢您的支持。
由于
答案 0 :(得分:1)
我们不是使用sprintf
创建字符串表达式然后对其进行评估,而是使用评估'vs'将其转换为符号然后对其进行评估
library(dplyr)
mtcars %>%
summarise_at(vars(vars_to_test), funs(
try(stats::t.test(.[(!! rlang::sym(iv)) == 0], .[(!! rlang::sym(iv)) == 1])$p.value)
))
# disp hp drat wt qsec
#1 2.476526e-06 1.819806e-06 0.01285342 0.0007281397 3.522404e-06
如果我们真的想要解析表达式,请使用rlang_parse_expr
和rlang::eval_tidy
以及sym
library(rlang)
eval_tidy(parse_expr("mtcars %>% summarise_at(vars(vars_to_test),
funs(t.test(.[(!!sym(iv))==0],
.[(!!sym(iv))==1])$p.value ))"))
# disp hp drat wt qsec
#1 2.476526e-06 1.819806e-06 0.01285342 0.0007281397 3.522404e-06