Also look at ?any
and ?all Very handy functions. Miguel On Thu, Mar 11, 2010 at 12:37 PM, Esmail <esmail...@gmail.com> wrote: > Hello all, > > I have two matrices, pop and pop2, each the same number of rows and > columns that I want to compare for equality. I am concerned about > efficiency in this operation. > > I've tried a few things without success so far. Doing something simple > like: > > if (pop==pop2) { cat('equal') } else { cat('NOT equal') } > > results in the warning: > 1: In if (pop == pop2) { : > the condition has length > 1 and only the first element will be used > > so it seems to look only at the first element. > > print(pop==pop2) gives me a listing of TRUE/FALSE values for each > element. > > I am really only looking for a single TRUE or FALSE value to tell me > if the two populations (ie pop and pop2) are the same or different. In > my application there will be about 200 columns and 50 rows and this > comparison will happen very frequently (possibly a few thousand > times), so I am concerned about efficiency. > > I am appending the code I used to generate my matrices and some things > I tried (mentioned above) and also the output get so far. > > FWIW, Linux environment, R 2.10.1. > > Thanks, > Esmail > > ps: Am I correct that if I do the assignment > > pop2 = pop > > I create a totally separate instance/(deep)copy of the > data? I tried a few tests that seem to confirm this, but I'd > rather be sure. > > > ------- code ------------ > > # create a binary vector of size "len" > create_bin_Chromosome <- function(len) > { > sample(0:1, len, replace=T) > } > > # create popsize members, each of length len > create_pop_2 <- function(popsize, len) > { > datasize=len*popsize > > npop <- matrix(0, popsize, len, byrow=T) > > for(i in 1:popsize) > npop[i,] = create_bin_Chromosome(len) > > npop > } > > > POP_SIZE = 3 > LEN = 8 > > pop = create_pop_2(POP_SIZE, LEN) > pop2 = pop > > print(pop==pop2) > if (pop==pop2) { cat('equal\n') } else { cat('NOT equal\n') } > > print(pop) > print(pop2) > > pop[2,5] = 99 > pop2[3,3] = 77 > > print(pop==pop2) > if (pop==pop2) { cat('equal\n') } else { cat('NOT equal\n') } > > print(pop) > print(pop2) > > ------ output ----------- > > > source('popc.R') > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] > [1,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE > [2,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE > [3,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE > equal > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] > [1,] 0 1 0 1 0 1 1 0 > [2,] 0 1 1 0 0 0 0 0 > [3,] 0 1 0 0 1 0 1 1 > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] > [1,] 0 1 0 1 0 1 1 0 > [2,] 0 1 1 0 0 0 0 0 > [3,] 0 1 0 0 1 0 1 1 > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] > [1,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE > [2,] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE > [3,] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE > equal > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] > [1,] 0 1 0 1 0 1 1 0 > [2,] 0 1 1 0 99 0 0 0 > [3,] 0 1 0 0 1 0 1 1 > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] > [1,] 0 1 0 1 0 1 1 0 > [2,] 0 1 1 0 0 0 0 0 > [3,] 0 1 77 0 1 0 1 1 > Warning messages: > 1: In if (pop == pop2) { : > the condition has length > 1 and only the first element will be used > 2: In if (pop == pop2) { : > the condition has length > 1 and only the first element will be used > > > > ______________________________________________ > 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.