[R] list of complex objects?

William Dunlap wdunlap at tibco.com
Thu May 27 18:43:51 CEST 2010


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Peter Langfelder
> Sent: Wednesday, May 26, 2010 11:06 PM
> To: r-help at r-project.org
> Subject: Re: [R] list of complex objects?
> 
> Simply keep track of the next free component, or use
> 
> nextComp = length(list_of_lists)+1,
> 
> then use
> 
> list_of_lists[[nextComp]] = fitJC1
> 
> Unlike with vectors, with lists you don't have to specify 
> length and can add
> as many list components as you want later  The length of the list will
> automatically adjust.

'Nonrecursive' vectors (i.e., of numbers, strings, or logicals)
auto-extend just as lists do.  If you are planning on making
a very long vector (either a list or a nonrecursive variety),
it will go faster if you preallocate it to the eventual size.
With numeric vectors you can do with with numeric(size) but
with list(size) doesn't do that: use vector("list",size).

  > # use auto-extension of numeric vector:
  > system.time({ s0<-numeric(0) ; for(i in 1:1e5)s0[i]<-i })
     user  system elapsed
   21.293   0.000  21.294
  > # preallocate numeric vector
  > system.time({ s100000<-numeric(1e5) ; for(i in 1:1e5)s100000[i]<-i
})
     user  system elapsed
    0.184   0.000   0.186
  > identical(s0, s100000) # same answer in different times
  [1] TRUE

  > # use auto-extension of list
  > system.time({ s0<-vector("list",0) ; for(i in 1:1e5)s0[i]<-list(i)
})
     user  system elapsed
   49.795   1.704  51.496
  > # preallocate list
  > system.time({ s100000<-vector("list",100000) ; for(i in
1:1e5)s100000[i]<-list(i) })
     user  system elapsed
    0.256   0.000   0.256
  > identical(s0, s100000)
  [1] TRUE

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com 

> 
> Peter
> 
> 
> 
> On Wed, May 26, 2010 at 9:21 PM, Nick Matzke 
> <matzke at berkeley.edu> wrote:
> 
> > Thanks!  I tried that before but for some reason didn't 
> notice that it was
> > working correctly.
> >
> > PS: How would I append another element to the list?  This 
> doesn't work:
> >
> > x = append(list_of_fits, fitJC1)
> >
> > # still works, from original list construction
> > x[3]
> >
> > # but this doesn't work
> > x[4]
> >
> > Cheers!
> > Nick
> >
> >
> >
> > Peter Langfelder wrote:
> >
> >> c concatenates all arguments. For example, c(c(0,1,2), 
> c(3,4,5)) gives
> >> a vector 0,1,2,3,4,5.
> >> Another example:
> >>
> >>  c(list(a=c(0,1), b = c(2,3)), list(c = c(4,5), d = c(5,6)))
> >>>
> >> $a
> >> [1] 0 1
> >>
> >> $b
> >> [1] 2 3
> >>
> >> $c
> >> [1] 4 5
> >>
> >> $d
> >> [1] 5 6
> >>
> >> So instead of a list of two lists, you get a single list with 4
> >> components.
> >>
> >> If you want to make a list of objects, use
> >>
> >> list_of_fits = list(fitJC1, fitJC2, fitJC3)
> >>
> >> HTH,
> >>
> >> Peter
> >>
> >>
> >> On Wed, May 26, 2010 at 5:23 PM, Nick Matzke 
> <matzke at berkeley.edu> wrote:
> >>
> >>>
> >>> Erik Iverson wrote:
> >>>
> >>>> Nick Matzke wrote:
> >>>>
> >>>>> Hi all,
> >>>>>
> >>>>> If I would like to make a list of complex objects -- in my case,
> >>>>> phylogenetic trees, but it could be e.g. statistical 
> results from
> >>>>> something
> >>>>> like lm, or whatever -- how can I put them into a list?
> >>>>>
> >>>>> When I try the obvious methods, e.g. cat, append, list, 
> etc., I seem to
> >>>>> get weird behaviors where R is trying to merge the 
> subfields within the
> >>>>> objects or something.
> >>>>>
> >>>>> Any help much appreciated.  Cheers!!
> >>>>> Nick
> >>>>>
> >>>>>
> >>>>>  Perhaps you can give us a reproducible example that shows
> >>>>
> >>>> a) what you tried
> >>>> b) what happened
> >>>> c) what you expected to happen
> >>>>
> >>>>
> >>> Hi!  Sorry, I should have done that initially.  Here's my problem:
> >>>
> >>> #====================
> >>> # example of the issue with lists of objects:
> >>>
> >>> library(ape)
> >>> library(phangorn)
> >>> example(NJ)
> >>>
> >>> # Jukes-Cantor (starting tree from NJ)
> >>> fitJC1 <- pml(tree, Laurasiatherian)
> >>>
> >>> # optimize edge length parameter
> >>> fitJC2 <- optim.pml(fitJC1)
> >>> fitJC2
> >>>
> >>> # search for a better tree using NNI rearrangements
> >>> fitJC3 <- optim.pml(fitJC2, optNni=TRUE)
> >>> fitJC3
> >>>
> >>> # Now, the function SH.test can allegedly take "objects of
> >>> # class 'pml' separated by commas, [or] a list containing
> >>> # such objects".  Since I'm going to have hundreds of these
> >>> # fits, I'd like to make submit a list of them to SH.test,
> >>> # something like this:
> >>>
> >>> list_of_fits = c(fitJC1, fitJC2, fitJC3)
> >>> SH.test(list_of_fits, B=100)
> >>>
> >>> # ...but "list of fits" is something weird, e.g.
> >>> (list_of_fits[1])
> >>>
> >>> #...does not return the same thing as:
> >>> (fitJC1)
> >>> #====================
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> ====================================================
> >>> Nicholas J. Matzke
> >>> Ph.D. Candidate, Graduate Student Researcher
> >>> Huelsenbeck Lab
> >>> Center for Theoretical Evolutionary Genomics
> >>> 4151 VLSB (Valley Life Sciences Building)
> >>> Department of Integrative Biology
> >>> University of California, Berkeley
> >>>
> >>> Graduate Student Instructor, IB200A
> >>> Principles of Phylogenetics: Systematics
> >>> http://ib.berkeley.edu/courses/ib200a/index.shtml
> >>>
> >>> Lab websites:
> >>> http://ib.berkeley.edu/people/lab_detail.php?lab=54
> >>> http://fisher.berkeley.edu/cteg/hlab.html
> >>> Dept. personal page:
> >>> 
> http://ib.berkeley.edu/people/students/person_detail.php?person=370
> >>> Lab personal page: 
> http://fisher.berkeley.edu/cteg/members/matzke.html
> >>> Lab phone: 510-643-6299
> >>> Dept. fax: 510-643-6264
> >>> Cell phone: 510-301-0179
> >>> Email: matzke at berkeley.edu
> >>>
> >>> Mailing address:
> >>> Department of Integrative Biology
> >>> 3060 VLSB #3140
> >>> Berkeley, CA 94720-3140
> >>>
> >>> -----------------------------------------------------
> >>> "[W]hen people thought the earth was flat, they were 
> wrong. When people
> >>> thought the earth was spherical, they were wrong. But if 
> you think that
> >>> thinking the earth is spherical is just as wrong as 
> thinking the earth is
> >>> flat, then your view is wronger than both of them put together."
> >>>
> >>> Isaac Asimov (1989). "The Relativity of Wrong." The 
> Skeptical Inquirer,
> >>> 14(1), 35-44. Fall 1989.
> >>> http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
> >>>
> >>> ______________________________________________
> >>> 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.
> >>>
> >>>
> >> ______________________________________________
> >> 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.
> >>
> >>
> > --
> > ====================================================
> > Nicholas J. Matzke
> > Ph.D. Candidate, Graduate Student Researcher
> > Huelsenbeck Lab
> > Center for Theoretical Evolutionary Genomics
> > 4151 VLSB (Valley Life Sciences Building)
> > Department of Integrative Biology
> > University of California, Berkeley
> >
> > Graduate Student Instructor, IB200A
> > Principles of Phylogenetics: Systematics
> > http://ib.berkeley.edu/courses/ib200a/index.shtml
> >
> > Lab websites:
> > http://ib.berkeley.edu/people/lab_detail.php?lab=54
> > http://fisher.berkeley.edu/cteg/hlab.html
> > Dept. personal page:
> > http://ib.berkeley.edu/people/students/person_detail.php?person=370
> > Lab personal page: 
> http://fisher.berkeley.edu/cteg/members/matzke.html
> > Lab phone: 510-643-6299
> > Dept. fax: 510-643-6264
> > Cell phone: 510-301-0179
> > Email: matzke at berkeley.edu
> >
> > Mailing address:
> > Department of Integrative Biology
> > 3060 VLSB #3140
> > Berkeley, CA 94720-3140
> >
> > -----------------------------------------------------
> > "[W]hen people thought the earth was flat, they were wrong. 
> When people
> > thought the earth was spherical, they were wrong. But if 
> you think that
> > thinking the earth is spherical is just as wrong as 
> thinking the earth is
> > flat, then your view is wronger than both of them put together."
> >
> > Isaac Asimov (1989). "The Relativity of Wrong." The 
> Skeptical Inquirer,
> > 14(1), 35-44. Fall 1989.
> > http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
> >
> > ______________________________________________
> > 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.
> >
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> 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.
> 



More information about the R-help mailing list