Dplyr 和多重 t 检验(保持相同的 IV)
Dplyr and multiple t test (keeping the same IV)
我正在使用此 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()
is deprecated. Use summarise_all()
,
summarise_at()
or summarise_if()
instead. To map funs
over a
selection of variables, use summarise_at()
当我更改_all、at 或_if 的代码时,此功能不再起作用。我正在寻找一些建议,非常感谢您的支持。
谢谢
不是用 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
我正在使用此 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()
is deprecated. Usesummarise_all()
,summarise_at()
orsummarise_if()
instead. To mapfuns
over a selection of variables, usesummarise_at()
当我更改_all、at 或_if 的代码时,此功能不再起作用。我正在寻找一些建议,非常感谢您的支持。
谢谢
不是用 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