2013-09-25 35 views
16

chciałem znaleźć korelację row-mądry:zastosowaniu funkcji na dwóch listach

X <- matrix(rnorm(2000), nrow=10) 
Y <- matrix(rnorm(2000), nrow=10) 

chciałbym znaleźć korelację pomiędzy każdym rzędem A i B w następujący sposób. Na przykład nie powinno mieć wartość korelacji rzędu 1 X i rzędu 1 Y. Podobnie zastosowanie do wszystkich wierszy będzie łącznie dziesięć wartości (ponieważ jest dziesięć rzędów)

sapply(1:10, function(row) cor(X[row,], Y[row,])) 

teraz, w jaki sposób należy zastosuj tę funkcję do dwóch list (zawierających po około 50 ramek danych). Rozważając, lista A ma ramki danych 1 $, 2 $, 3 $ ... i tak dalej, a lista B ma podobną liczbę ramek danych 1 $, 2 $, 3 $. Tak więc funkcja powinna być zastosowana do listy A $ 1 i listy B $ 1 i listy A $ 2, listy B $ 2 itd. Dla innych ramek danych na liście. Na końcu będę miał dziesięć wartości w przypadku porównania 1 (lista A 1 USD i lista B 1 USD) i dla innych również.

Czy można to zrobić za pomocą "lapply". Każda pomoc będzie doceniona.

Odpowiedz

25

Wygląda na to, że szukasz mapply. Oto przykład:

listA <- list(matrix(rnorm(2000), nrow=10), 
       matrix(rnorm(2000), nrow=10)) 
listB <- list(matrix(rnorm(2000), nrow=10), 
       matrix(rnorm(2000), nrow=10)) 
mapply(function(X,Y) { 
    sapply(1:10, function(row) cor(X[row,], Y[row,])) 
    }, X=listA, Y=listB) 
Powiązane problemy