Hi, Even if you have 15 matrices, you should be able to do it in the same way.
For example in the case of 5 matrices: set.seed(24) A<- matrix(sample(1:50,20,replace=TRUE),ncol=4) B<- matrix(sample(40:60,20,replace=TRUE),ncol=4) C<- matrix(sample(1:60,20,replace=TRUE),ncol=4) D<- matrix(sample(1:30,20,replace=TRUE),ncol=4) E<- matrix(sample(30:50,20,replace=TRUE),ncol=4) mat1<- combn(LETTERS[1:5],2) #combn(1:15,2) ###For 15 matrices. Change `1:15` by the names of the matrices library(energy) res<-sapply(split(mat1,col(mat1)),function(.dat) dcor(get(.dat[1]),get(.dat[2]),1.5)) names(res)<-apply(mat1,2,paste,collapse="") res # AB AC AD AE BC BD BE CD #0.9435313 0.8097978 0.6819835 0.8065327 0.7639587 0.8123220 0.7919720 0.6971948 # CE DE #0.7002440 0.8506617 Also, I dcor() needs matrices that are compatible. Make sure that the dimensions are compatible: There was a typo in my previous reply. It should be cor(A,B) set.seed(24) A<- matrix(sample(1:50,20,replace=TRUE),ncol=4) B<- matrix(sample(40:60,30,replace=TRUE),ncol=6) C<- matrix(sample(1:60,20,replace=TRUE),ncol=5) D<- matrix(sample(1:30,20,replace=TRUE),ncol=2) E<- matrix(sample(30:50,20,replace=TRUE),ncol=5) cor(A,B) #works dcor(A,B) #[1] 0.9651803 cor(A,C) #Error in cor(A, C) : incompatible dimensions dcor(A,C) #Error in .dcov(x, y, index) : Sample sizes must agree cor(A,D) #Error in cor(A, D) : incompatible dimensions A.K. ________________________________ From: Amanda Li <amand...@uchicago.edu> To: arun <smartpink...@yahoo.com> Sent: Wednesday, June 19, 2013 1:11 AM Subject: Re: [R] write a function to do pairwise calculation Hello, Thanks for your help! I am a novice in R, and may I ask how I am supposed to do it if it is actually 15 matrices instead of 3? I gave up dcor because the matrices are too large. I was thinking of cor(A,B)*cor(A,B)/length(cor(A,B)) (the length varies because the matrices are of different dimensions). May I ask how am I supposed to write the function to make it work? And also could you recommend a book that is suitable for R novice? Thank you so much for your help! I really appreciate it! Best, Amanda 2013/6/18 arun <smartpink...@yahoo.com> Hi, > >You didn't provide any information about the package. I guess it is from >"energy". > > >library(energy) >x <- iris[1:50, 1:4] #examples given in the package >y <- iris[51:100, 1:4] >z<- iris[101:150,1:4] >vec1<-c("x","y","z") >mat1<- combn(vec1,2) > >sapply(split(mat1,col(mat1)),function(.dat) >dcor(get(.dat[1]),get(.dat[2]),1.5)) ># 1 2 3 >#0.1862890 0.2331567 0.2303689 > > >A.K. > > > > > > >----- Original Message ----- >From: Amanda Li <amand...@uchicago.edu> >To: r-help@r-project.org >Cc: >Sent: Monday, June 17, 2013 1:14 PM >Subject: [R] write a function to do pairwise calculation > >Hello, > >I want to write a function to do pairwise calculation, but I don' know how >to write it. Could anyone help? > >i.e. I have A (2*3), B(3*3), C(4*3) three matrices. I want to calculate >distance correlation between each pair of matrices using code "dcor". How >do I write a function so that I can get the result as a matrix integrating >all the pairwise results? > >Thanks in advance for your help! > >Best, >Amanda > > [[alternative HTML version deleted]] > >______________________________________________ >R-help@r-project.org mailing list >https://stat.ethz.ch/mailman/listinfo/r-help >PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.