Hi, If I have a vector: junk <- c(2,0,0,3,0) and want to access, say, all the elements that are greater than zero. I just do: junk[which(junk>0)] Now, If I have a list: jlist <- list(NULL,c(1,0),NULL,c(1,2,3), NULL) and want to access all the elements that have length greater than zero, I know how to find the elements with: which(sapply(jlist,length)>0) But how do I get a new list, only with the non-zero-length elements, without having to write a for loop? I tried: notnull <- which(sapply(jlist,length)>0) jlist[[notnull]] and got the error: Error in jlist[[notnull]] : recursive indexing failed at level 2 Thank you for any help!
Hello, Just try jlist[ sapply(jlist,length) > 0 ] Hope this helps, Rui Barradas Em 08-11-2012 14:42, Gon?alo Ferraz escreveu:> Hi, > > > If I have a vector: > > junk <- c(2,0,0,3,0) > > and want to access, say, all the elements that are greater than zero. I just do: > > junk[which(junk>0)] > > > > Now, If I have a list: > > jlist <- list(NULL,c(1,0),NULL,c(1,2,3), NULL) > > and want to access all the elements that have length greater than zero, I know how to find the elements with: > > which(sapply(jlist,length)>0) > > But how do I get a new list, only with the non-zero-length elements, without having to write a for loop? > > I tried: > > notnull <- which(sapply(jlist,length)>0) > jlist[[notnull]] > > and got the error: > > Error in jlist[[notnull]] : recursive indexing failed at level 2 > > Thank you for any help! > > ______________________________________________ > R-help at r-project.org 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.
try this (use '[' for indexing)> jlist <- list(NULL,c(1,0),NULL,c(1,2,3), NULL) > jlist[[1]] NULL [[2]] [1] 1 0 [[3]] NULL [[4]] [1] 1 2 3 [[5]] NULL> which(sapply(jlist, length) > 0)[1] 2 4> jlist[sapply(jlist, length) > 0][[1]] [1] 1 0 [[2]] [1] 1 2 3>On Thu, Nov 8, 2012 at 9:42 AM, Gon?alo Ferraz <gferraz29 at gmail.com> wrote:> Hi, > > > If I have a vector: > > junk <- c(2,0,0,3,0) > > and want to access, say, all the elements that are greater than zero. I just do: > > junk[which(junk>0)] > > > > Now, If I have a list: > > jlist <- list(NULL,c(1,0),NULL,c(1,2,3), NULL) > > and want to access all the elements that have length greater than zero, I know how to find the elements with: > > which(sapply(jlist,length)>0) > > But how do I get a new list, only with the non-zero-length elements, without having to write a for loop? > > I tried: > > notnull <- which(sapply(jlist,length)>0) > jlist[[notnull]] > > and got the error: > > Error in jlist[[notnull]] : recursive indexing failed at level 2 > > Thank you for any help! > > ______________________________________________ > R-help at r-project.org 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.-- Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it.
Hi, If i understand it correctly, lapply(jlist,function(x) x[x>0]) #[[1]] #NULL #[[2]] #[1] 1 #[[3]] #NULL #[[4]] #[1] 1 2 3 #[[5]] #NULL A.K. ----- Original Message ----- From: Gon?alo Ferraz <gferraz29 at gmail.com> To: r-help at r-project.org Cc: Sent: Thursday, November 8, 2012 9:42 AM Subject: [R] Accessing selected elements of a list Hi, If I have a vector: junk <- c(2,0,0,3,0) and want to access, say, all the elements that are greater than zero. I just do: junk[which(junk>0)] Now, If I have a list: jlist <- list(NULL,c(1,0),NULL,c(1,2,3), NULL) and want to access all the elements that have length greater than zero, I know how to find the elements with: which(sapply(jlist,length)>0) But how do I get a new list, only with the non-zero-length elements, without having to write a for loop? I tried: notnull <- which(sapply(jlist,length)>0) jlist[[notnull]] and got the error: Error in jlist[[notnull]] : recursive indexing failed at level 2 Thank you for any help! ______________________________________________ R-help at r-project.org 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.
Hi, You can also use: jlist[unlist(lapply(jlist,length))>0] #[[1]] #[1] 1 0 #[[2]] #[1] 1 2 3 A.K. ________________________________ From: Gon?alo Ferraz <gferraz29 at gmail.com> To: arun <smartpink111 at yahoo.com> Sent: Thursday, November 8, 2012 9:59 AM Subject: Re: [R] Accessing selected elements of a list Thanks! I think one quick solution (from another answer that just arrived) is: jlist[ sapply(jlist,length) > 0 ] G. On Nov 8, 2012, at 10:57 AM, arun wrote: Hi,>If i understand it correctly, > >lapply(jlist,function(x) x[x>0]) >#[[1]] >#NULL > >#[[2]] >#[1] 1 > >#[[3]] >#NULL > >#[[4]] >#[1] 1 2 3 > >#[[5]] >#NULL >A.K. > > > >----- Original Message ----- >From: Gon?alo Ferraz <gferraz29 at gmail.com> >To: r-help at r-project.org >Cc: >Sent: Thursday, November 8, 2012 9:42 AM >Subject: [R] Accessing selected elements of a list > >Hi, > > >If I have a vector: > >junk <- c(2,0,0,3,0) > >and want to access, say, all the elements that are greater than zero. I just do: > >junk[which(junk>0)] > > > >Now, If I have a list: > >jlist <- list(NULL,c(1,0),NULL,c(1,2,3), NULL) > >and want to access all the elements that have length greater than zero, I know how to find the elements with: > >which(sapply(jlist,length)>0) > >But how do I get a new list, only with the non-zero-length elements, without having to write a for loop? > >I tried: > >notnull <- which(sapply(jlist,length)>0) >jlist[[notnull]] > >and got the error: > >Error in jlist[[notnull]] : recursive indexing failed at level 2 > >Thank you for any help! > >______________________________________________ >R-help at r-project.org 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. > >Gon?alo Ferraz, PhD Biological Dynamics of Forest Fragments Project Smithsonian Tropical Research Institute / Instituto Nacional de Pesquisas da Amaz?nia http://ferrazlab.com/LabSite/Welcome.html Endere?o Postal / Postal Address: PDBFF - INPA, CP 478, Av. Andr? Ara?jo, 2936, 69060-000 Manaus AM, Brasil Tel: 55 (92) 3642-1148