[R] Make one vector from matrix comparison

Stavros Macrakis macrakis at alum.mit.edu
Wed Nov 12 15:27:55 CET 2008


You can just call `c` on your result to flatten the matrix into a
vector.  You could also eliminate the for-loops by using the `apply`
function:

pairwise_setequal <-
   function(a,b) c(apply(a, 1, function(r){ apply(b, 1, setequal, r ) } ))

But are you sure that is what you want to do?  In the case of boolean
vectors, setequal simply tests whether the two vectors include the
same elements, i.e. both are empty, both contain only F, both contain
only T, or both contain both F's and T's.  If you want to compare the
vectors pointwise, use `identical` instead of `setequal`.

             -s

> On Mon, Nov 10, 2008 at 10:11 AM, Chris82 <rubenbauar at gmx.de> wrote:
>> I compare each row of a matrix with each row of another matrix.
>>
>> testmat1 <- matrix(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16), nrow=4)
>> testmat2 <- matrix(c(1,2,3,5,5,6,7,8,9,10,11,12,13,14,15,16), nrow=4)
>>
>> Both matrix differs in the last row.
>>
>> Now I create a loop:
>>
>> for (i in (1:4)){
>> for (j in (1:4)){
>> b <- (c(setequal(testmat1[j,],testmat2[i,])))
>> print(b)
>> }
>> }
>>
>> R outputs me the following:
>>
>> [1] TRUE
>> [1] FALSE   ....

>> but I need one vector like this:
>>
>> [1] TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE
>> FALSE FALSE FALSE FALSE



More information about the R-help mailing list