Skip to content

element-by-element comparison

7 messages · wendy, Jim Lemon, Tsjerk Wassenaar +3 more

#
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 A>B[,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.
#
On 10/30/2011 02:51 PM, Wendy wrote:
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
#
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,]   10    2
[3,]    4    8

B<A

      [,1]  [,2]
[1,]  TRUE FALSE
[2,] FALSE  TRUE
[3,] FALSE FALSE

Cheers,

Tsjerk
On Sun, Oct 30, 2011 at 8:55 AM, Jim Lemon <jim at bitwrit.com.au> 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,

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 <pburns at pburns.seanet.com> wrote:

  
    
#
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 30.10.2011 04:51, Wendy wrote:
This list is about R rather than Matlab dialects.

For R:

A>B

gives logical values and, e.g.,

  apply(A>B, 2, as.integer)

converts to integer.

Uwe Ligges