r - 循环变量以生成余额表
问题描述
我正在使用rstatix
. 我可以为每个变量生成我想要的结果,但无法遍历多个变量以一次性生成一个链接表。
require(dplyr)
require(rstatix)
data <- data.frame(group=rep(c(1,2),5), v1=rnorm(10),v2=rnorm(10))
data %>%
t_test(v1 ~ group,detailed = TRUE) %>%
adjust_pvalue() %>%
add_significance(cutpoints = c(0, 1e-04, 0.001, 0.01, 0.05, 1),
symbols = c("****", "***", "**", "*", "ns")) %>%
select(c(".y.","estimate1","estimate2","statistic","p.adj","p.adj.signif")) %>%
dplyr::rename(variable = .y.,
'training' = estimate1,
'test' = estimate2,
't-test'=statistic,
p=p.adj,
sl=p.adj.signif)
这失败了:
vars <- c("V1", "V2")
bt <- character(0)
for(i in 1:length(vars)){
bt_temp <- data %>%
t_test(vars[i] ~ group, detailed = TRUE) %>%
adjust_pvalue() %>%
add_significance(cutpoints = c(0, 1e-04, 0.001, 0.01, 0.05, 1),
symbols = c("****", "***", "**", "*", "ns")) %>%
select(c(".y.","estimate1","estimate2","statistic","p.adj","p.adj.signif")) %>%
dplyr::rename(variable = .y.,
'training' = estimate1,
'test' = estimate2,
't-test'=statistic,
p=p.adj,
sl=p.adj.signif)
bt <- rbind(bt, bt_temp)
解决方案
关键是用来paste0
拼凑一个字符串,然后您可以将其转换为公式。在下面的解决方案中,我已将您的 for 循环转换为更纯粹的地图。
require(dplyr)
require(rstatix)
data <- data.frame(group=rep(c(1,2),5), v1=rnorm(10),v2=rnorm(10))
vars <- c("v1", "v2")
my_new_function <- function(var){
data %>%
t_test(as.formula(paste0(var, " ~ group")), detail = TRUE) %>%
adjust_pvalue() %>%
add_significance(cutpoints = c(0, 1e-04, 0.001, 0.01, 0.05, 1),
symbols = c("****", "***", "**", "*", "ns")) %>%
select(c(".y.","estimate1","estimate2","statistic","p.adj","p.adj.signif")) %>%
dplyr::rename(variable = .y.,
'training' = estimate1,
'test' = estimate2,
't-test'=statistic,
p=p.adj,
sl=p.adj.signif)
}
vars %>% purrr::map(my_new_function) %>% bind_rows
你有一个无用的拼写错误vars
,混合了大写和小写“v/V”。如果你真的想使用 for 循环,你需要添加一个缺少的结束 }。另外,创建
bt_temp <- vector("list", length(vars))
在你的循环之前。在循环内部,将结果分配给bt_temp[[i]]
. 在循环之后绑定行一次。如果您尝试bt
在每次迭代中增长,那么当有很多迭代时,您的循环会很慢。
推荐阅读
- typescript - 使用带有 TypeScript 和 Vue SFC 的全局枚举
- javascript - 从远程源有效地加载/缓存非小型数组?
- python - 如何使用 pandas 在数据框中添加 CSV 文件名作为列标题?
- python - plt 用斜线填充两条线之间的区域
- javascript - Android Webview评估Javascript无法在ES6模块文件中找到函数
- flutter - 无法在颤动中加载共享首选项
- c# - Redemption CreateItemFromTemplate 模拟
- javascript - 如何在没有数组的情况下附加到 JSON?
- java - 无法等待扩展背景页面加载 chrome 扩展。无法禁用扩展
- javascript - 从数组中重写对象