R 申请两个矩阵-t检验
看起来我不知道如何做一个简单的代码。。。对于R 申请两个矩阵-t检验,r,apply,R,Apply,看起来我不知道如何做一个简单的代码。。。对于t.test计算,我想使用任何apply函数而不是循环。我有两个矩阵: data1 <- t(replicate(2000, rnorm(200,mean=6))) data2 <- t(replicate(2000, rnorm(200,mean=5))) 我错过了什么 为了明确我的目标: t.test(data1[,i], data2[,i]) 我想从中提取p值并存储为向量。由于矩阵的维数相等,您可以使用sapply循环列索引,并将
t.test
计算,我想使用任何apply
函数而不是循环。我有两个矩阵:
data1 <- t(replicate(2000, rnorm(200,mean=6)))
data2 <- t(replicate(2000, rnorm(200,mean=5)))
我错过了什么
为了明确我的目标:
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',]
您正在尝试进行两个样本t测试,比较data1中第1列和data2中第1列的平均值?对于第2、3、4列,我试图对两个矩阵中的对应列进行配对t检验。然后使用
sapply(1:ncol(data1),函数(x)t.test(data1[,x],data2[,x])$p.value)
这将起作用:mapply(t.test,as.data.frame(data2),as.data.frame(data1),SIMPLIFY=FALSE)
@ChirayuChamoli当然,您也可以使用as.data.frame
作为数据来执行此操作。frame
不过是一个具有附加属性的列表,因此mapply
将其视为一个列表。我确实喜欢使用split
,因为它的功能更加明确。
all_t_tests['p.value',]