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/
>
> ______________________________________________
> [email protected] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel