[R] effective matrix subset
Marc Schwartz
marc_schwartz at comcast.net
Sat Aug 9 16:37:54 CEST 2008
on 08/09/2008 06:52 AM Dan Davison wrote:
> On Sat, Aug 09, 2008 at 06:29:59AM -0500, Marc Schwartz wrote:
>> on 08/09/2008 06:01 AM jgarcia at ija.csic.es wrote:
>>> Hi;
>>> If we have a matrix A, and a vector X, where length(X)=nrow(A), and X
>>> contains a wanted column for each row in A, in row ascending order. How
>>> would be the most effective way to extract the desired vector V (with
>>> length(V)=nrow(A))?
>>
>> A <- matrix(1:20, 4, 5)
>>
>>> A
>> [,1] [,2] [,3] [,4] [,5]
>> [1,] 1 5 9 13 17
>> [2,] 2 6 10 14 18
>> [3,] 3 7 11 15 19
>> [4,] 4 8 12 16 20
>>
>>
>> # Create an arbitrary set of indices, one for each row in A
>> X <- c(2, 5, 1, 4)
>>
>>> X
>> [1] 2 5 1 4
>>
>>
>> Presumably you want:
>>
>> V <- c(A[1, 2], A[2, 5], A[3, 1], A[4, 4])
>>
>>> V
>> [1] 5 18 3 16
>>
>>
>> If so, then:
>>
>>> sapply(seq(nrow(A)), function(i) A[i, X[i]])
>> [1] 5 18 3 16
>
> Or
>
>> A[cbind(seq(nrow(A)), X)]
> [1] 5 18 3 16
>
> Dan
Better (and faster) solution Dan.
I can't blame the lack of coffee on missing that one this morning. I
have had a full pot already over the past 6 hours, working on shifting
my internal clock and getting ready to begin my journey to Dortmund
later tonight...
Safe travels to all who are going.
Marc
More information about the R-help
mailing list