From simon.urbanek at r-project.org  Mon Apr 22 16:34:12 2013
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Mon, 22 Apr 2013 10:34:12 -0400
Subject: [Rd] Converting an environment to a list: mget vs. as.list
In-Reply-To: <CABdHhvHF7_94JuUr8NAD+keW31hBynAPhhBcLuZzJ9WiPbVk_Q@mail.gmail.com>
References: <CABdHhvHF7_94JuUr8NAD+keW31hBynAPhhBcLuZzJ9WiPbVk_Q@mail.gmail.com>
Message-ID: <0AA945F7-017B-44FB-980E-2F4ABEF358F8@r-project.org>

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
> 
> 



[Rd] Converting an environment to a list: mget vs. as.list
Simon Urbanek