Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Applying a function to two lists?

To find the row-wise correlation of two matrices X and Y, the output should have a correlation value for row 1 of X and row 1 of Y, ..., hence in total ten values (because there are ten rows):

X <- matrix(rnorm(2000), nrow=10) Y <- matrix(rnorm(2000), nrow=10)  sapply(1:10, function(row) cor(X[row,], Y[row,])) 

Now, how should I apply this function to two lists (containing around 50 dataframes each)?

Consider list A has dataframes $1, $2, $3... and so on and list B has similar number of dataframes $1, $2, $3. So the function should be applied to listA$1,listB$1 and listA$2,listB$2 ... and so on for other dataframes in the list. In the end I will have ten values in case of comparison 1 (listA$1 and listB$1) and for others as well.

Could this be done using "lapply"?

like image 513
Paul Avatar asked Sep 25 '13 10:09

Paul


1 Answers

You seem to be looking for mapply. Here's an example:

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) 
like image 78
shadow Avatar answered Sep 25 '22 22:09

shadow