优化应用功能输出

时间:2010-12-20 23:03:13

标签: r

我有以下功能:

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中估算

任何人都可以提供一些建议吗?

2 个答案:

答案 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