看起来我无法弄清楚如何做一个简单的代码...我想使用任何apply
函数代替循环进行t.test
计算。我有两个矩阵:
data1 <- t(replicate(2000, rnorm(200,mean=6)))
data2 <- t(replicate(2000, rnorm(200,mean=5)))
我想为这些矩阵的每一列执行t.test
并提取p值。
我尝试过类似的东西:
comb_data <- array(c(data1, data2), c(dim(data1), 2))
p-value_1 <- t(apply(comb_data, 2, function(x) t.test(data1[, 1], data1[, 2])$p-value))
我在这里缺少什么?
只是为了明确我的目标:
t.test(data1[,i], data2[,i])
我想从中提取p值并存储为矢量。
答案 0 :(得分:2)
由于您的矩阵具有相同的维度,您可以使用sapply
循环列索引,并将它们应用于两个矩阵。
sapply(1:ncol(data1),function(x) t.test(data1[,x],data2[,x])$p.value)
答案 1 :(得分:1)
以下代码将矩阵拆分为一个列表,其中每个元素都包含一列,然后调用t.test
:
all_t_tests = mapply(t.test, split(data1, 1:2000), split(data2, 1:2000), SIMPLIFY = FALSE)
从每个人那里获取p.value
:
sapply(all_t_tests, '[[', 'p.value')
将SIMPLIFY
设置为TRUE
会将t.test
的结果合并为一个大数据结构,而不是t.test
结果列表。
all_t_tests = mapply(t.test, split(data1, 1:2000), split(data2, 1:2000), SIMPLIFY = TRUE)
可以轻松访问p.value
:
all_t_tests['p.value',]