申请两个矩阵- t.test

Apply for two matrixes- t.test

看来我不知道如何编写简单的代码...我想使用任何 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 值并存储为向量。

由于您的矩阵具有相同的维度,您可以使用 sapply 遍历列索引并将它们应用于两个矩阵。

sapply(1:ncol(data1),function(x) t.test(data1[,x],data2[,x])$p.value)

以下代码将矩阵拆分为一个列表,其中每个元素包含一列,然后调用 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 设置为 TRUEt.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',]