Hadley Wickham
2013-Apr-22 13:14 UTC
[Rd] Converting an environment to a list: mget vs. as.list
Hi all, An interesting discovery: if you want to convert an environment to a list, and you already know the names of the objects in the environment, using mget is about twice as fast as using as.list on the environment. https://gist.github.com/hadley/5434786 Hadley -- Chief Scientist, RStudio http://had.co.nz/
Simon Urbanek
2013-Apr-22 14:34 UTC
[Rd] Converting an environment to a list: mget vs. as.list
On Apr 22, 2013, at 9:14 AM, Hadley Wickham wrote:> Hi all, > > An interesting discovery: if you want to convert an environment to a > list, and you already know the names of the objects in the > environment, using mget is about twice as fast as using as.list on the > environment. >I'd say the more interesting part is that ls() is so "slow" if you use the ambiguous "name" argument instead of the direct "envir" one:> microbenchmark(ls(env), ls(envir=env), .Internal(ls(env, FALSE)))Unit: nanoseconds expr min lq median uq max neval ls(env) 12445 13422 14450 15144 37505 100 ls(envir = env) 1741 2020 2331 2643 15574 100 .Internal(ls(env, FALSE)) 631 730 828 910 4157 100 Note that your objects are so small that you cannot distinguish constant cost (e.g. just the method dispatch on as.list) - and that is in fact what causes the difference - not the actual conversion:> microbenchmark(as.list(env), as.list.environment(env), mget(c("x", "y"), env))Unit: microseconds expr min lq median uq max neval as.list(env) 4.8 5.5 5.9 6.1 33.1 100 as.list.environment(env) 1.4 1.9 2.1 2.4 4.8 100 mget(c("x", "y"), env) 2.6 3.1 3.4 3.7 37.5 100 So be careful with general statements on very small run times. Suddenly it's no longer surprising ... Cheers, S> https://gist.github.com/hadley/5434786 > > Hadley > > > > > -- > Chief Scientist, RStudio > http://had.co.nz/ > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >