申请两个矩阵-t.test

时间:2017-03-01 11:10:23

标签: r apply

看起来我无法弄清楚如何做一个简单的代码...我想使用任何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值并存储为矢量。

2 个答案:

答案 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',]