Hi, I would love an easy way to extract elements from a list. For example, if I want the first element from each of 10 arrays stored in a list, Lst[[1:10]][1,1] seems like a logical approach, but gives this error: "Error: recursive indexing failed at level 3" The following workaround is functional but can get annoying/confusing. first.element=vector() for (i in 1:10){ first.element=c(first.element, Lst[[i]][1,1]) } Is there a better way to do this? Thanks for any help! Jeff
Try sapply( Lst, function(m) m[1,1] ) Also note that to subset a list, you just need Lst[ 1:10 ] and not Lst[[ 1:10 ]] (note the double square brackets). Regards, Adai Forest Floor wrote:> Hi, > > I would love an easy way to extract elements from a list. > > For example, if I want the first element from each of 10 arrays stored > in a list, > > Lst[[1:10]][1,1] seems like a logical approach, but gives this error: > "Error: recursive indexing failed at level 3" > > The following workaround is functional but can get annoying/confusing. > > first.element=vector() > for (i in 1:10){ first.element=c(first.element, Lst[[i]][1,1]) } > > Is there a better way to do this? Thanks for any help! > > Jeff > > ______________________________________________ > 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. > > >
Use lapply or sapply:> L <- list(a = 1:4, b = 11:15) > lapply(L, "[[", 1)$a [1] 1 $b [1] 11> sapply(L, "[[", 1)a b 1 11 Also please see last line on every r-help message regarding providing reproducible code. Lst was not defined in your post. On 7/14/07, Forest Floor <rhago at comcast.net> wrote:> Hi, > > I would love an easy way to extract elements from a list. > > For example, if I want the first element from each of 10 arrays stored > in a list, > > Lst[[1:10]][1,1] seems like a logical approach, but gives this error: > "Error: recursive indexing failed at level 3" > > The following workaround is functional but can get annoying/confusing. > > first.element=vector() > for (i in 1:10){ first.element=c(first.element, Lst[[i]][1,1]) } > > Is there a better way to do this? Thanks for any help! > > Jeff > > ______________________________________________ > 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. >
The golden rule is that [[ ]] only returns one element: sapply(Lst, "[", 1, 1) is probably what you want. On Sat, 14 Jul 2007, 'Forest Floor' aka 'rhago' aka 'Jeff' aka 'R User confused about his identity' wrote:> Hi, > > I would love an easy way to extract elements from a list. > > For example, if I want the first element from each of 10 arrays stored > in a list, > > Lst[[1:10]][1,1] seems like a logical approach, but gives this error: > "Error: recursive indexing failed at level 3"It doesn't if you really have a list of 2D arrays.> The following workaround is functional but can get annoying/confusing. > > first.element=vector() > for (i in 1:10){ first.element=c(first.element, Lst[[i]][1,1]) } > > Is there a better way to do this? Thanks for any help! > > Jeff > ______________________________________________ > 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.PLEASE DO! -- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595