[Rd] Converting an environment to a list: mget vs. as.list
Hadley Wickham
h.wickham at gmail.com
Mon Apr 22 16:41:12 CEST 2013
> 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
That is interesting!
> 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:
That's a good point, but the first example was quite a bit larger, and
hence the impact of S3 dispatch slightly less:
env <- environment(plot)
names <- ls(env)
microbenchmark(
as.list(env),
as.list.environment(env),
mget(names, env))
expr min lq median uq max neval
as.list(env) 42 49 51 53 140 100
as.list.environment(env) 39 44 46 48 117 100
mget(names, env) 33 35 37 38 83 100
so mget still wins in that case.
Hadley
--
Chief Scientist, RStudio
http://had.co.nz/
More information about the R-devel
mailing list