我有一个大的(20 000行,200列)矩阵,格式如下:
mydata<-matrix(rexp(200, rate=.1), ncol=8,nrow=4)
我希望首先从所有其他行中减去每一行,然后在每个新行上执行t.test,返回p.value,比较列1:4和列5:8。
这将返回类似于:
的内容Row1 Row2 0.03
Row1 Row3 0.66
Row1 Row4 0.001
我已经编写了一个样本,通过for循环实现了这一点,以便更清楚地理解(尽管输出略有不同),但是显然没有足够的效率来处理这么大的数据集。
sigdiff<-matrix(, nrow = nrow(mydata), ncol = nrow(mydata))
for (i in 1:(nrow(mydata)-1)){
for (k in (i+1):(nrow(mydata)-1)){
diff<-mydata[i,]-mydata[k,]
sigdiff[i,k]<-t.test(diff[1:4],diff[5:8])$p.value
}
}
sigdiff[is.na(sigdiff)]=1
感谢您在优化此项目时提供的帮助!