[R] matrix evaluation using if function

Berend Hasselman bhh at xs4all.nl
Fri Apr 29 16:17:11 CEST 2011


David Winsemius wrote:
> 
> On Apr 29, 2011, at 4:27 AM, ivan wrote:
> 
>> Hi All,
>>
>> I am trying to create a function which evaluates whether the values  
>> (which
>> are equal to one) of a matrix are the same as their mirror values.  
>> Consider
>> the following matrix:
>>
>>> n<-matrix(cbind(c(0,1,1),c(1,0,0),c(0,1,0)),3,3)
>>> colnames(n)<-cbind("A","B","C");rownames(n)<-cbind("A","B","C")
>>> n
>>  A B C
>> A 0 1 0
>> B 1 0 1
>> C 1 0 0
>>
>> Hence, since n[2,1] and n[1,2] are 1 and the same, the function should
>> return the name of the row of n[2,1]. I used the following function:
>>
>> for (i in length(rownames(n))) {
>>
>> for (j in length(colnames(n))){
>>
>> if(n[i,j]==n[j,i]){
>>
>> rownames(n)[[i]]->output} else {}
>>
>> }
>>
>> }
>>
>>> output
>> NULL
>>
>> The right answer would have been "B", though.
> 
> Can you explain why "A" would not be an equally good answer to satisfy  
> your problem set up?
> 
>  > which(n == t(n) & col(n) != row(n) , arr.ind=TRUE)
>    row col
> B   2   1
> A   1   2
>  > rownames(which(n == t(n) & col(n) != row(n) , arr.ind=TRUE) )
> [1] "B" "A"
> 
> # Which would seem to be the correct answer, but
> # This adds an additional constraint and also insures no diagonal  
> elements
> 
>  > rownames(which(n == t(n) & col(n) != row(n) & lower.tri(n),  
> arr.ind=TRUE) )
> [1] "B"
> 

Wouldn't this do it too (dsince the diagonal is set to false by lower.tri)?:

rownames(which(n == t(n) & lower.tri(n),  arr.ind=TRUE))

Berend



--
View this message in context: http://r.789695.n4.nabble.com/matrix-evaluation-using-if-function-tp3483188p3483785.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list