Joe W. Byers
2006-Oct-24 10:58 UTC
[R] Help with understanding [[]] [] array, list, matrix referencing
Hi all,
I would greatly appreciate some help understanding how R references
arrays, matrices, lists, and objects using [[]] and []. I have read the
R guides and several tutorials but I am not the fastest kid on the block
so I am still having difficulty understanding this. For examples the
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.
I could use some help in knowing when to use [[]] referencing and when
to use [] referencing. If there is a really good book, webpage, or link
with explanation and examples I would appreciate you forwarding the the
citation.
Thank you
Joe
David Barron
2006-Oct-24 11:09 UTC
[R] Help with understanding [[]] [] array, list, matrix referencing
Have you tried help("["), which gives a good explanation.
On 24/10/06, Joe W. Byers <Joe-Byers at utulsa.edu>
wrote:> Hi all,
>
> I would greatly appreciate some help understanding how R references
> arrays, matrices, lists, and objects using [[]] and []. I have read the
> R guides and several tutorials but I am not the fastest kid on the block
> so I am still having difficulty understanding this. For examples the
> 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.
>
> I could use some help in knowing when to use [[]] referencing and when
> to use [] referencing. If there is a really good book, webpage, or link
> with explanation and examples I would appreciate you forwarding the the
> citation.
>
> Thank you
> Joe
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
================================David Barron
Said Business School
University of Oxford
Park End Street
Oxford OX1 1HP
Joe Byers
2006-Oct-24 11:31 UTC
[R] Help with understanding [[]] [] array, list, matrix referencing
David, Yes, I did. I just still do not get it. That is why I ask here. Hoping someone knew a step by step guide that I could look at. My trial and error approach takes me hours some days. I currently move most things in and out of data.frames where I can name the columns and reference with the $ and a subsetting function, but that is not always efficient. If I could understand the [ referencing better, my code would be more efficient and I think faster. Part of my problem is my SAS background where everything is a flat table and coding is really sloppy. A data step with a bunch of if-then-else to perform the calculation where as in matrix format like in R you do things more compactly. Not always easy to read but efficient and fast. I appreciate you help. Thank you Joe David Barron wrote:> Have you tried help("["), which gives a good explanation. > > > On 24/10/06, Joe W. Byers <Joe-Byers at utulsa.edu> wrote: >> Hi all, >> >> I would greatly appreciate some help understanding how R references >> arrays, matrices, lists, and objects using [[]] and []. I have read the >> R guides and several tutorials but I am not the fastest kid on the block >> so I am still having difficulty understanding this. For examples the >> 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. >> >> I could use some help in knowing when to use [[]] referencing and when >> to use [] referencing. If there is a really good book, webpage, or link >> with explanation and examples I would appreciate you forwarding the the >> citation. >> >> Thank you >> Joe >> >> ______________________________________________ >> R-help at stat.math.ethz.ch mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > >
Thomas Lumley
2006-Oct-24 14:21 UTC
[R] Help with understanding [[]] [] array, list, matrix referencing
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