From: Duncan Murdoch <murdoch_at_stats.uwo.ca>

Date: Tue 08 Mar 2005 - 17:15:58 GMT

> env <- h( function(x) x^2 )

> env$H

function(x) x^2

> env$H(1)

[1] 1

R-devel@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed Mar 09 04:27:37 2005

Date: Tue 08 Mar 2005 - 17:15:58 GMT

> f <- function( H, prevEnv = NULL) {

+ if (!is.null(prevEnv)) H <- prevEnv$H + cat('Evaluate H to get ', H(1), '\n') + return(environment(NULL)) + }

I thought that evaluating H would force it, so that H would be available in the environment returned by the function. But this is not so:

> env <- f( function(x) x^2 )

Evaluate H to get 1

> env$H

<promise: 012094D8>

> env$H(1)

Error: attempt to apply non-function

So I tried to explicitly force it:

> g <- function( H, prevEnv = NULL) {

+ if (!is.null(prevEnv)) H <- prevEnv$H + force(H) + return(environment(NULL)) + }

but this still doesn't work:

> env <- g( function(x) x^2 )

> env$H

<promise: 01206FC0>

> env$H(1)

Error: attempt to apply non-function

It seems that I need to do an assignment to convert H from a promise to an evaluated object:

> h <- function( H, prevEnv = NULL) {

+ if (!is.null(prevEnv)) H <- prevEnv$H + H <- H + return(environment(NULL)) + }

> env <- h( function(x) x^2 )

> env$H

function(x) x^2

> env$H(1)

[1] 1

Is this a bug, or just the way things are?

I get the same results in both R-patched and R-devel.

Duncan Murdoch

R-devel@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed Mar 09 04:27:37 2005

*
This archive was generated by hypermail 2.1.8
: Mon 20 Feb 2006 - 03:21:01 GMT
*