申请两个矩阵- 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
设置为 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',]
看来我不知道如何编写简单的代码...我想使用任何 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
设置为 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',]