Diogo André Alagador
2008-Mar-02 12:11 UTC
[R] an efficient pairwise matrix cell's comparison function
To all, I am undergoing an analysis involving big matrices of about 30000x200 which I have to handle in a more efficient way. So I would like some advice to build such efficient function to deliver the following result: - starting with 2 matrices of the same dimension (eg. A and B) 0 0 3 5 6 0 0 5 A= 0 0 6 4 B= 0 4 3 5 0 0 5 0 1 0 0 9 - the function should deliver a C matrix (same dimension too), where at each position C(i,j), compares A and B. if A(i,j)=0, than C(i,j)=0, if A(i,j)!=0, than C(i,j)=B(i,j) 6 0 0 5 C= 0 0 3 5 0 0 0 0 Although not an expert I could build a function with 2 cycles (reading columns and rows) which is not quick. Maybe you can help me in this “challenge”. Much thanks in advance, Diogo André Alagador Biodiversity & Global Change Lab, Museo Nacional de Ciencias Naturales, CSIC, Madrid, España Forest Research Centre, Instituto Superior de Agronomia, Universidade Técnica de Lisboa, Lisboa, Portugal [[alternative HTML version deleted]]
jim holtman
2008-Mar-02 12:18 UTC
[R] an efficient pairwise matrix cell's comparison function
Does this do what you want?> A <- matrix(sample(0:2, 25, TRUE), ncol=5) > B <- matrix(1:25, ncol=5) > C <- ifelse(A == 0, 0, B) > A[,1] [,2] [,3] [,4] [,5] [1,] 1 1 1 2 1 [2,] 1 0 1 1 0 [3,] 0 0 1 0 2 [4,] 0 1 2 0 0 [5,] 1 2 1 2 2> B[,1] [,2] [,3] [,4] [,5] [1,] 1 6 11 16 21 [2,] 2 7 12 17 22 [3,] 3 8 13 18 23 [4,] 4 9 14 19 24 [5,] 5 10 15 20 25> C[,1] [,2] [,3] [,4] [,5] [1,] 1 6 11 16 21 [2,] 2 0 12 17 0 [3,] 0 0 13 0 23 [4,] 0 9 14 0 0 [5,] 5 10 15 20 25>On Sun, Mar 2, 2008 at 7:11 AM, Diogo Andr? Alagador <mcnda839 at mncn.csic.es> wrote:> To all, > > > > I am undergoing an analysis involving big matrices of about 30000x200 which > I have to handle in a more efficient way. So I would like some advice to > build such efficient function to deliver the following result: > > > > - starting with 2 matrices of the same dimension (eg. A and B) > > > > 0 0 3 5 6 0 0 5 > > A= 0 0 6 4 B= 0 4 3 5 > > 0 0 5 0 1 0 0 9 > > > > - the function should deliver a C matrix (same dimension too), > where at each position C(i,j), compares A and B. > > if A(i,j)=0, than C(i,j)=0, > > if A(i,j)!=0, than C(i,j)=B(i,j) > > > > 6 0 0 5 > > C= 0 0 3 5 > > 0 0 0 0 > > > > Although not an expert I could build a function with 2 cycles (reading > columns and rows) which is not quick. Maybe you can help me in this > "challenge". > > > > Much thanks in advance, > > > > > Diogo Andr? Alagador > Biodiversity & Global Change Lab, Museo Nacional de Ciencias Naturales, > CSIC, Madrid, Espa?a > Forest Research Centre, Instituto Superior de Agronomia, Universidade > T?cnica de Lisboa, Lisboa, Portugal > > > [[alternative HTML version deleted]] > > > ______________________________________________ > R-help at 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. > >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve?