[R] Extract values from multiple lists
Dénes Tóth
toth.denes at ttk.mta.hu
Tue Dec 16 21:42:47 CET 2014
On 12/16/2014 06:06 PM, SH wrote:
> Dear List,
>
> I hope this posting is not redundant. I have several list outputs with the
> same components. I ran a function with three different scenarios below
> (e.g., scen1, scen2, and scen3,...,scenN). I would like to extract the
> same components and group them as a data frame. For example,
> pop.inf.r1 <- scen1[['pop.inf.r']]
> pop.inf.r2 <- scen2[['pop.inf.r']]
> pop.inf.r3 <- scen3[['pop.inf.r']]
> ...
> pop.inf.rN<-scenN[['pop.inf.r']]
> new.df <- data.frame(pop.inf.r1, pop.inf.r2, pop.inf.r3,...,pop.inf.rN)
>
> My final output would be 'new.df'. Could you help me how I can do that
> efficiently?
If efficiency is of concern, do not use data.frame() but create a list
and add the required attributes with data.table::setattr (the setattr
function of the data.table package). (You can also consider creating a
data.table instead of a data.frame.)
# some largish lists
a1 <- list(x = rnorm(1e6), y = rnorm(1e6))
a2 <- list(x = rnorm(1e6), y = rnorm(1e6))
a3 <- list(x = rnorm(1e6), y = rnorm(1e6))
# amount of memory allocated
gc(reset=TRUE)
# get names of the objects
out_names <- ls(pattern="a[[:digit:]]$")
# create a list
out <- lapply(lapply(out_names, get), "[[", "x")
# note that no copying occured
gc()
# decorate the list
data.table::setattr(out, "names", out_names)
data.table::setattr(out, "row.names", seq_along(out[[1]]))
class(out) <- "data.frame"
# still no copy
gc()
# output
head(out)
HTH,
Denes
>
> Thanks in advance,
>
> Steve
>
> P.S.: Below are some examples of summary outputs.
>
>
>> summary(scen1)
> Length Class Mode
> aql 1 -none- numeric
> rql 1 -none- numeric
> alpha 1 -none- numeric
> beta 1 -none- numeric
> n.sim 1 -none- numeric
> N 1 -none- numeric
> n.sample 1 -none- numeric
> n.acc 1 -none- numeric
> lot.inf.r 1 -none- numeric
> pop.inf.n 2000 -none- list
> pop.inf.r 2000 -none- list
> pop.decision.t1 2000 -none- list
> pop.decision.t2 2000 -none- list
> sp.inf.n 2000 -none- list
> sp.inf.r 2000 -none- list
> sp.decision 2000 -none- list
>> summary(scen2)
> Length Class Mode
> aql 1 -none- numeric
> rql 1 -none- numeric
> alpha 1 -none- numeric
> beta 1 -none- numeric
> n.sim 1 -none- numeric
> N 1 -none- numeric
> n.sample 1 -none- numeric
> n.acc 1 -none- numeric
> lot.inf.r 1 -none- numeric
> pop.inf.n 2000 -none- list
> pop.inf.r 2000 -none- list
> pop.decision.t1 2000 -none- list
> pop.decision.t2 2000 -none- list
> sp.inf.n 2000 -none- list
> sp.inf.r 2000 -none- list
> sp.decision 2000 -none- list
>> summary(scen3)
> Length Class Mode
> aql 1 -none- numeric
> rql 1 -none- numeric
> alpha 1 -none- numeric
> beta 1 -none- numeric
> n.sim 1 -none- numeric
> N 1 -none- numeric
> n.sample 1 -none- numeric
> n.acc 1 -none- numeric
> lot.inf.r 1 -none- numeric
> pop.inf.n 2000 -none- list
> pop.inf.r 2000 -none- list
> pop.decision.t1 2000 -none- list
> pop.decision.t2 2000 -none- list
> sp.inf.n 2000 -none- list
> sp.inf.r 2000 -none- list
> sp.decision 2000 -none- list
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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