Re: [R] Apply function to do pairwise calculation
Hi, Not sure if this helps. #example dataset set.seed(24) mat1-matrix(sample(1:50,20*20,replace=TRUE),ncol=20) set.seed(49) colnames(mat1)- sample(rep(LETTERS[1:4],5),20) rownames(mat1)- colnames(mat1) mat2-combn(LETTERS[1:4],2) res- sapply(split(mat2,col(mat2)),function(x){ x1-mat1[rownames(mat1)%in% x[1],colnames(mat1)%in%x[1]]; x2- mat1[rownames(mat1)%in% x[2],colnames(mat1)%in% x[2]];avecor(x1,x2)}) names(res)- apply(mat2,2,paste,collapse=) res # AB AC AD BC BD CD #0.4806725 0.4505996 0.6160342 0.5567617 0.3721136 0.4480448 A.K. - Original Message - From: Amanda Li amand...@uchicago.edu To: r-help@r-project.org Cc: Sent: Monday, September 30, 2013 10:55 AM Subject: [R] Apply function to do pairwise calculation Hello, I want to do pairwise calculation, but I am not sure how to do so. i.e. I have a correlation matrix M 200*200. Namely colnames(M)=rownames(M). In addition, colnames(M) is one of A, B, C, D. I want to first sort the matrix M into 16 modules according to colnames and rownames, and then apply: avecor - function(x,y) { z - (sum(cor(x,y)*cor(x,y))/length(cor(x,y)))^0.5 return(z) } So as to calculate the average correlation between A,B; A,C; A,D; B,C; B,D; C,D. 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.
[R] Apply function to do pairwise calculation
Hello, I want to do pairwise calculation, but I am not sure how to do so. i.e. I have a correlation matrix M 200*200. Namely colnames(M)=rownames(M). In addition, colnames(M) is one of A, B, C, D. I want to first sort the matrix M into 16 modules according to colnames and rownames, and then apply: avecor - function(x,y) { z - (sum(cor(x,y)*cor(x,y))/length(cor(x,y)))^0.5 return(z) } So as to calculate the average correlation between A,B; A,C; A,D; B,C; B,D; C,D. 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.
Re: [R] Apply function to do pairwise calculation
Amanda, If I understand what you're trying to do, this example might help you. M - structure(c(0.66, 0.05, -0.93, -0.61, 0.65, -0.25, 0.23, -0.89, 0.37, 0.38, -0.91, 0.91, -0.05, -0.65, -0.94, 0.73, -0.88, 0.25, 0.04, -0.89, -0.47, -0.46, 0.86, -0.29, 0.92, 0.22, 0.77, -0.98, -0.56, 0.11, 0.35, -0.49, 0.48, 0.42, -0.28, 0.16, 0.2, 0.61, 0.7, 0.94, 0.89, 0.46, 0.93, 0.36, -0.95, -0.01, 0.27, 0.73, -0.17, -0.93, 0.36, 0.78, 0.02, -0.8, -0.57, -0.03, -0.81, -0.74, 0.16, 0.52, 0.65, -0.45, 0.46, -0.68, -0.85, 0.74, 0.77, -0.39, 0.03, 0.93, -0.23, -0.91, -0.14, 0.77, -0.36, 0.43, -0.5, 0.5, -0.68, -0.6, 0.12, -0.18, 0.16, -0.38, -0.18, -0.59, -0.3, -0.14, 0.53, -0.53, -0.56, 0.14, -0.54, 0.93, 0.54, 0.03, 0.06, 0.14, 0.97, -0.09), .Dim = c(10L, 10L), .Dimnames = list(c(D, C, D, C, B, A, C, A, C, B), c(D, C, D, C, B, A, C, A, C, B))) meanM - data.frame(row=NA, col=NA, mean=NA) count - 0 for(i in 1:(ng-1)) { for(j in (i+1):ng) { count - count + 1 meanM[count, row] - groups[i] meanM[count, col] - groups[j] meanM[count, mean] - mean(M[dimnames(M)[[1]]==groups[i], dimnames(M)[[2]]==groups[j]]) }} Jean On Mon, Sep 30, 2013 at 9:55 AM, Amanda Li amand...@uchicago.edu wrote: Hello, I want to do pairwise calculation, but I am not sure how to do so. i.e. I have a correlation matrix M 200*200. Namely colnames(M)=rownames(M). In addition, colnames(M) is one of A, B, C, D. I want to first sort the matrix M into 16 modules according to colnames and rownames, and then apply: avecor - function(x,y) { z - (sum(cor(x,y)*cor(x,y))/length(cor(x,y)))^0.5 return(z) } So as to calculate the average correlation between A,B; A,C; A,D; B,C; B,D; C,D. 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. [[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.