上下文:
目标:
我想为每个用户定义的子组创建一个函数,该函数将对数据框中的每个最大差异项,提取T检验输出的元素,并存储数据框中的元素
以T统计结果为例,最终结果应如下所示:
Males_T_stat Females_T_stat
MD_item1 2.71 2.5
MD_item2 1.71 1.5
MD_item3 0.71 0.5
当前代码:
创建测试数据框:
dat <- data.frame(
md1 = 1:60,
gender = factor(rep(c("m", "f"), 30)),
generation = factor(rep(c("a", "b"), 30)),
md2 = 61:120
)
指定我的受访者子组的名称(即分类变量)。
groupnames <- c("gender", "generation")
item_vec <- dat %>% select(contains(("md")))
group_vec <- dat[groupnames]
将子组名称向量转换为数据帧。这一步可能是多余的,但是我对使用数据帧更自在。
item_vec <- data.frame(item_vec)
group_vec <- data.frame(group_vec)
到目前为止,我已经尝试使用嵌套的for循环来运行T测试并将每个测试输出存储在列表中。此代码部分有效;对于“ group_vec”中命名的每个子组,代码仅针对“ item_vec”中的最后一项生成T测试结果。但是,我想要“ item_vec”中每个项目的结果,这是我目前停滞的地方。
res <- list()
for (i in 1:length(group_vec)) {
res[[i]] <- list(test)
for (j in 1:length(item_vec)) {
test <- (t.test(item_vec[[j]] ~ group_vec[[i]]))
res[i] <- list(test)
}
}
res
感谢您提供的任何帮助!
在嵌套循环中,替换
res[i] <- list(test)
with
res[[i]][[j]] <- list(test)
因为'j'在item_vec
上循环。如果我们仅将其分配给res[[i]]
或res[i]
,则对于'group_vec'中的每个item_vec
,它只会将前一个更新/替换为下一个,并且由于在最后一个之后没有任何更新,因此最后一个仍然存在对于每个“ group_vec”
另外,最好将res
初始化为
res <- vector('list', length(group_vec))
然后按照for
循环进行更改
for (i in 1:length(group_vec)) {
res[[i]] <- list(test)
for (j in 1:length(item_vec)) {
test <- (t.test(item_vec[[j]] ~ group_vec[[i]]))
res[[i]][[j]] <- list(test)
}
}