From radford at cs.toronto.edu  Mon Nov 24 19:46:02 2014
From: radford at cs.toronto.edu (Radford Neal)
Date: Mon, 24 Nov 2014 13:46:02 -0500
Subject: [Rd]  Error "promise already under evaluation ..."
In-Reply-To: <mailman.11.1416826806.27250.r-devel@r-project.org>
References: <mailman.11.1416826806.27250.r-devel@r-project.org>
Message-ID: <20141124184602.GA15277@cs.toronto.edu>

> The above question still stands, but otherwise, I overlooked the most
> obvious solution:
> 
> dim_1 <- function(x) dim(x)
> 
> Unit: nanoseconds
>                   expr   min    lq      mean median    uq     max neval cld
>                 dim(x)     0     1    72.941      1     1    2696  1000 a
>           base::dim(x) 11549 13474 15105.950  14245 15399   60824  1000   c
>               dim_1(x)     1   771  2801.544    771  1156 1806225  1000 a
>               dim_R(x)  5390  6930  8077.753   7315  8085  249069  1000  b
>      dim_R_memoized(x)  1156  1926  2520.119   2310  2695   73528  1000 a
>    dim_R_memoized_2(x)   385   771  1089.243    771  1156   20019  1000 a
>         dim_illegal(x)     0     1   161.480      1   386    2311  1000 a
>                 sum(x) 10395 15784 16459.454  15785 16169  114333  1000   c
> 
> So, my best shot on the original problem would now be to either use:
> 
> dim2 <- function(x) dim(x)
> foo <- function(x, dim=dim2(x)) { dim }
> 
> or simply avoid the name clash via:
> 
> foo <- function(x, dimx=dim(x)) { dimx }


I think you'll find that baseenv()$dim(x) and .BaseNamespaceEnv$dim(x)
are about 25 times faster than base::dim(x).  This doesn't seem like
it should be necessary...

   Radford



[Rd] Error "promise already under evaluation ..."
Radford Neal