[R] Help with understanding [[]] [] array, list, matrix referencing

Thomas Lumley tlumley at u.washington.edu
Tue Oct 24 16:21:25 CEST 2006


On Tue, 24 Oct 2006, Joe W. Byers wrote:
> following code produces a 5 element list of 2X5 random numbers that I
> then convert to a 2X5X5 matrix.
> cov<-matrix(c(.4,-.1,-.1,.3),nrow=2,ncol=2)
> rnds<-NULL;
> for (i in 1:5){
> 	t1<-rnorm(5,cov)
> 	t2<-rnorm(5,cov)
> 	t3<-rbind(t1,t2)
> 	rnds[i]<-list(t3)
> }
>
> rnds.matrix<-array(unlist(rnds),dim=c(2,5,5));
>
> To access the matrix rnds.matrix I use rnds.matrix[x,y,z].  This I
> understand.
>
> To access the list I user [[z]][x,y].  This I do not understand.  I
> found by chance this reference notation in an old mailing list that
> helped me.
>

Yes, this can be confusing.  One reason that it is confusing is that the 
rules appear to be different (though they aren't) for vectors and lists.

The single bracket [ extracts a subvector, and the double bracket [[ 
extracts an element.  That is, with
  a<-list(b=1,c=2,d=3)
you can extracts the first element of a,
> a[[1]]
[1] 1
or a sublist with the first two elements
> a[1:2]
$b
[1] 1

$c
[1] 2
or a sublist with just the first element
> a[1]
$b
[1] 1

The same is true for numeric or character vectors, but there an element 
and a subvector of length one are the same, so the distinction between [[ 
and [ is harder to understand.
> b<-1:10
> b[1:2]
[1] 1 2
> b[1]
[1] 1
> b[[1]]
[1] 1

 	-thomas



More information about the R-help mailing list