2013-09-25 5 views
16

Я хотел найти строки корреляции:применение функция в двух списках

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

Я хотел бы найти корреляцию между каждой строкой A и B следующим образом. Например должно быть значение корреляции для строки 1 и X строке 1 Y. Аналогично применяя для всех строк будет в общей сложности десять значений (потому что есть десять строк)

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

Теперь, как я должен примените эту функцию к двум спискам (содержащим около 50 кадров данных каждый). Учитывая, что в списке A есть dataframes $ 1, $ 2, $ 3 ... и так далее, и список B имеет схожее число кадров данных $ 1, $ 2, $ 3. Таким образом, функция должна применяться к listA $ 1 и listB $ 1 и listA $ 2, listB $ 2 и т. Д. Для других фреймов данных в списке. В итоге у меня будет десять значений в случае сравнения 1 (listA $ 1 и listB $ 1) и других.

Это можно сделать, используя «lapply». Любая помощь будет оценена по достоинству.

ответ

25

Вы, кажется, ищете mapply. Вот пример:

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) 
Смежные вопросы