Оптимизация применения функции вывода - PullRequest
1 голос
/ 21 декабря 2010

У меня есть следующая функция:

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 ]

3 голосов
/ 21 декабря 2010

Это лучшее, что я могу придумать на данный момент.

FUN <- function(y) {
  test <- cor.test(y,phenotype,method="spearman")
  out <- unlist(test[c("p.value", "estimate")])
}
t(apply(data, 1, FUN))
1 голос
/ 21 декабря 2010

Это будет более компактно и даст 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...