[R] General indexing in multidimensional arrays

Duncan Murdoch murdoch.duncan at gmail.com
Mon Aug 1 16:50:51 CEST 2011


On 11-08-01 5:38 AM, Jannis wrote:
> Dear R community,
>
>
> I have a general question regarding indexing in multidiemensional arrays.
>
> Imagine I have a three dimensional array and I only want to extract on
> vector along a single dimension from it:
>
>
> data<- array(rnorm(64),dim=c(4,4,4))
>
> result<- data[1,1,]
>
> If I want to extract more than one of these vectors, it would now really
> help me to supply a logical matrix of the size of the first two dimensions:
>
>
> indices<- matrix(FALSE,ncol=4,nrow=4)
> indices[1,3]<- TRUE
> indices[4,1]<- TRUE
>
> result<- data[indices,]
>
> This, however would give me an error. I am used to this kind of indexing
> from Matlab and was wonderingt whether there exists an easy way to do
> this in R without supplying complicated index matrices of all three
> dimensions or logical vectors of the size of the whole matrix?
>
> The only way I could imagine would be to:
>
> result<- data[rep(as.vector(indices),times=4)]
>
> but this seems rather complicated and also depends on the order of the
> dimensions I want to extract.
>
>
> I do not want R to copy Matlabs behaviour, I am just wondering whether I
> missed one concept of indexing in R?
>

Base R doesn't have anything like that as far as I know.  The closest is 
matrix indexing: you construct a 3 column matrix whose rows are the 
indices of each element you want to extract.

Possibly plyr or some other package has functions to do this.

Duncan Murdoch



More information about the R-help mailing list