[R] Getting multiple matrix-values using a single command

David Winsemius dwinsemius at comcast.net
Fri Mar 12 20:40:20 CET 2010


On Mar 12, 2010, at 2:31 PM, David Winsemius wrote:

>
> On Mar 12, 2010, at 9:26 AM, Nils Rüfenacht wrote:
>
>> Dear all!
>>
>> I'm trying to get multiple values from a matrix by using a single  
>> command.
>>
>> Given a matrix A
>>
>> A <- matrix(seq(1,9),nrow=3,ncol=3)
>>
>> How can I get e.g. the values A[1,2] = 4 and A[3,3] = 9 with a  
>> single command and without using any loop? My first idea was to  
>> generate a row- and a column vector for the indices, i.e. c(1,3)  
>> indicating row number 1 (for A[1,2]) and row number 3 (for A[3,3])  
>> and similar for column-indices. Then I've tried to call
>>
>> A[c(1,3),c(2,3)]
>>
>> but instead of 4 , 9 the result is
>>
>> [,1] [,2]
>> [1,]    4    7
>> [2,]    6    9
>
> Pass the indices in a matrix:
>
> >  A[matrix(c(c(1,3), c(2,3)), ncol=2)]
> [1] 4 9

Also works for higher dimensions:

 > A <- array(seq(1,27),dim=c(3,3,3))

 > A
, , 1

      [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

, , 2

      [,1] [,2] [,3]
[1,]   10   13   16
[2,]   11   14   17
[3,]   12   15   18

, , 3

      [,1] [,2] [,3]
[1,]   19   22   25
[2,]   20   23   26
[3,]   21   24   27

 > matrix(1:3, ncol=3, nrow=3)
      [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3

 > A[matrix(1:3, ncol=3, nrow=3)]
[1]  1 14 27

-- 
David.



More information about the R-help mailing list