[R] element-by-element comparison
Hi, I have a vector and a matrix. For example, A = [ 12 3 4]; B = [ 4 13 10 2 4 8]; I am comparing A to each column of B using AB[,ii], so the expected result is C = [ 10 01 00]; I am looking for a way to do this quickly instead of going through the for loop, but haven't had any luck yet? Any advice is appreciated. Thank you very much. Wendy -- View this message in context: http://r.789695.n4.nabble.com/element-by-element-comparison-tp3952301p3952301.html Sent from the R help mailing list archive at Nabble.com. __ 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] element-by-element comparison
On 10/30/2011 02:51 PM, Wendy wrote: Hi, I have a vector and a matrix. For example, A = [ 12 3 4]; B = [ 4 13 10 2 4 8]; I am comparing A to each column of B using AB[,ii], so the expected result is C = [ 10 01 00]; I am looking for a way to do this quickly instead of going through the for loop, but haven't had any luck yet? Any advice is appreciated. Hi Wendy, You probably mean something like this: apply(B,2,``,A) which means roughly To each column of B, apply the function `` using A as the comparison values You will get a matrix of TRUE/FALSE values that are pretty much equivalent to your 0/1 values. Note that there are quite a few '*apply' functions and 'apply' is only guaranteed to work on arrays and matrices. Jim __ 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] element-by-element comparison
Hi Wendy, Most of the binary operators can deal with matrices and vectors natively: A-c(12,3,4) B-matrix(c(4,10,4,13,2,8),3,2) B [,1] [,2] [1,]4 13 [2,] 102 [3,]48 BA [,1] [,2] [1,] TRUE FALSE [2,] FALSE TRUE [3,] FALSE FALSE Cheers, Tsjerk On Sun, Oct 30, 2011 at 8:55 AM, Jim Lemon j...@bitwrit.com.au wrote: On 10/30/2011 02:51 PM, Wendy wrote: Hi, I have a vector and a matrix. For example, A = [ 12 3 4]; B = [ 4 13 10 2 4 8]; I am comparing A to each column of B using AB[,ii], so the expected result is C = [ 1 0 0 1 0 0]; I am looking for a way to do this quickly instead of going through the for loop, but haven't had any luck yet? Any advice is appreciated. Hi Wendy, You probably mean something like this: apply(B,2,``,A) which means roughly To each column of B, apply the function `` using A as the comparison values You will get a matrix of TRUE/FALSE values that are pretty much equivalent to your 0/1 values. Note that there are quite a few '*apply' functions and 'apply' is only guaranteed to work on arrays and matrices. Jim __ 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. -- Tsjerk A. Wassenaar, Ph.D. post-doctoral researcher Molecular Dynamics Group * Groningen Institute for Biomolecular Research and Biotechnology * Zernike Institute for Advanced Materials University of Groningen The Netherlands __ 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] element-by-element comparison
Given that you want to compare columns, you can just do: A B If you wanted to compare rows, then it is more troublesome. One approach would be: rep(A, each=nrow(B)) B On 30/10/2011 03:51, Wendy wrote: Hi, I have a vector and a matrix. For example, A = [ 12 3 4]; B = [ 4 13 10 2 4 8]; I am comparing A to each column of B using AB[,ii], so the expected result is C = [ 10 01 00]; I am looking for a way to do this quickly instead of going through the for loop, but haven't had any luck yet? Any advice is appreciated. Thank you very much. Wendy -- View this message in context: http://r.789695.n4.nabble.com/element-by-element-comparison-tp3952301p3952301.html Sent from the R help mailing list archive at Nabble.com. __ 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. -- Patrick Burns pbu...@pburns.seanet.com twitter: @portfolioprobe http://www.portfolioprobe.com/blog http://www.burns-stat.com (home of 'Some hints for the R beginner' and 'The R Inferno') __ 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] element-by-element comparison
Hi, To compare row wise is merely to compare column wise using the transpose matrix: t(B) A or t(t(B)A) if the result needs to be a matrix with dimensions equal to B. Cheers, Tsjerk On Sun, Oct 30, 2011 at 9:44 AM, Patrick Burns pbu...@pburns.seanet.com wrote: Given that you want to compare columns, you can just do: A B If you wanted to compare rows, then it is more troublesome. One approach would be: rep(A, each=nrow(B)) B On 30/10/2011 03:51, Wendy wrote: Hi, I have a vector and a matrix. For example, A = [ 12 3 4]; B = [ 4 13 10 2 4 8]; I am comparing A to each column of B using AB[,ii], so the expected result is C = [ 1 0 0 1 0 0]; I am looking for a way to do this quickly instead of going through the for loop, but haven't had any luck yet? Any advice is appreciated. Thank you very much. Wendy -- View this message in context: http://r.789695.n4.nabble.com/element-by-element-comparison-tp3952301p3952301.html Sent from the R help mailing list archive at Nabble.com. __ 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. -- Patrick Burns pbu...@pburns.seanet.com twitter: @portfolioprobe http://www.portfolioprobe.com/blog http://www.burns-stat.com (home of 'Some hints for the R beginner' and 'The R Inferno') __ 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. -- Tsjerk A. Wassenaar, Ph.D. post-doctoral researcher Molecular Dynamics Group * Groningen Institute for Biomolecular Research and Biotechnology * Zernike Institute for Advanced Materials University of Groningen The Netherlands __ 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] element-by-element comparison
The recycling rule should apply here (see 'An Introduction to R', Sec. 5.4.1; and ?Comparison, under 'Value'). x - -5:5 A - cbind(x, x, x) vec - numeric(length(x)) A vec ### recycling apply(A,2,``,vec) ### using apply vec - numeric(11) + 3; vec[1] - -6 A vec ### recycling apply(A,2,``,vec) ### using apply It should be faster than apply, but then apply seems much clearer. Regards, Enrico Am 30.10.2011 08:55, schrieb Jim Lemon: On 10/30/2011 02:51 PM, Wendy wrote: Hi, I have a vector and a matrix. For example, A = [ 12 3 4]; B = [ 4 13 10 2 4 8]; I am comparing A to each column of B using AB[,ii], so the expected result is C = [ 1 0 0 1 0 0]; I am looking for a way to do this quickly instead of going through the for loop, but haven't had any luck yet? Any advice is appreciated. Hi Wendy, You probably mean something like this: apply(B,2,``,A) which means roughly To each column of B, apply the function `` using A as the comparison values You will get a matrix of TRUE/FALSE values that are pretty much equivalent to your 0/1 values. Note that there are quite a few '*apply' functions and 'apply' is only guaranteed to work on arrays and matrices. Jim __ 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. -- Enrico Schumann Lucerne, Switzerland http://nmof.net/ __ 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] element-by-element comparison
On 30.10.2011 04:51, Wendy wrote: Hi, I have a vector and a matrix. For example, A = [ 12 3 4]; B = [ 4 13 10 2 4 8]; I am comparing A to each column of B using AB[,ii], so the expected result is C = [ 10 01 00]; This list is about R rather than Matlab dialects. For R: AB gives logical values and, e.g., apply(AB, 2, as.integer) converts to integer. Uwe Ligges I am looking for a way to do this quickly instead of going through the for loop, but haven't had any luck yet? Any advice is appreciated. Thank you very much. Wendy -- View this message in context: http://r.789695.n4.nabble.com/element-by-element-comparison-tp3952301p3952301.html Sent from the R help mailing list archive at Nabble.com. __ 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.