[R] row equality.

Liaw, Andy andy_liaw at merck.com
Mon Feb 14 00:31:49 CET 2005


Try something like:

> x1 <- matrix(sample(1:5, 30, replace=TRUE), ncol=3)
> x2 <- x1[4,]
> which(colSums(abs(t(x1) - x2)) == 0)
[1] 4

Note:  If the data are not all integers, you probably should test whether
the absolute sum differences is less than some very small number, rather
than == 0.

This uses the recyling rule, which, if you don't know about, probably would
be good to find out.

Andy


> From: James Bullard
> 
> I think that this is an easy one...
> 
> I have a matrix where each row is an (x,y,z) triplet. Given a 
> potential 
> (xnew,ynew,znew) triplet I want to know if the matrix already 
> contains a 
> row with the new values (the space already has that point). I 
> can do it 
> using a for loop, but I would like to know if there is anyway 
> in which I 
> can do it without the for loop.
> 
> I do it now like this (this algorithm appears to be correct, 
> but there 
> are probably much cleaner ways to write it.)
> 
> has.row <- function(m, r) {
>   for (i in 1:length(y[,1])) {
>     x <- ifelse(y[i,1:3] == r, 1, 0)
>     if (sum(x) == 3) {
>       return(TRUE)
>     }
>   }
>   return(FALSE)
> }
> 
> 
> 
> Thanks, jim
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
>




More information about the R-help mailing list