我有以下功能:
library (reshape)
phenotype <- rnorm (100)
data <- matrix(rnorm(1000), nrow = 10, ncol=100)
spearman.p <-
reshape(
melt(
apply(data, 1, function(y){
cor.test(y,phenotype,method="spearman")
}[c("p.value", "estimate")]
)
), timevar="L2", idvar="L1", direction="wide"
)
我想知道是否有更有效的方法来获得p.value并从“apply”ed cor.test中估算
任何人都可以提供一些建议吗?
答案 0 :(得分:3)
这是我现在能想到的最好的。
FUN <- function(y) {
test <- cor.test(y,phenotype,method="spearman")
out <- unlist(test[c("p.value", "estimate")])
}
t(apply(data, 1, FUN))
答案 1 :(得分:1)
这将更紧凑,并从重复数据中提供p.values。那是你想要的吗?:
dtt <- do.call(rbind, apply(data, 1, function(y){
cor.test(y,phenotype,method="spearman")
}[c("p.value", "estimate")]
) )
dtt
### p.value estimate
[1,] 0.2305644 0.1208641
[2,] 0.2305644 0.1208641
[3,] 0.2305644 0.1208641
[4,] 0.2305644 0.1208641
[5,] 0.2305644 0.1208641
[6,] 0.2305644 0.1208641
[7,] 0.2305644 0.1208641
[8,] 0.2305644 0.1208641
[9,] 0.2305644 0.1208641
[10,] 0.2305644 0.1208641
编辑:如果您正在寻找速度和/或轻松运输到面向并行平台的可能性,请将其添加到候选列表中:
pmtx <- matrix(NA, nrow=nrow(data), ncol=2)
for( i in 1:nrow(data) ) {
pmtx[i, 1:2 ] <- unlist(cor.test(data[i, ],
phenotype,
method="spearman")[c("p.value", "estimate")] ) }
pmtx