From spinuvit.list at gmail.com  Thu Oct 28 11:49:52 2010
From: spinuvit.list at gmail.com (Vitalie S.)
Date: Thu, 28 Oct 2010 11:49:52 +0200
Subject: [Rd] expressions as active bindings?
Message-ID: <cpnd3qu63zz.fsf@gmail.com>


Hello everyone!

Would it be possible some day to use expressions as active bindings?
Something like

  makeActiveExpression("foo", Expr0,  env)

where Expr0 is executed in _env_ whenever "foo" is refereed.

The motivation for this question is fourfold:
 - need to use <<- if the active binding is a function,
 - need to create objects in the environments beforehand, to make sure <<- does
 not assign them in a wrong place.
 - need to set the environment for function
 - active expressions would be faster (would not require the function invocation)

 
So instead of :

te <- new.env()
te$tempa <- 0
myfun <- function(x){tempa <<- 33}
environment(myfun) <- te
makeActiveBinding("a", myfun, te)

one would just use:

makeActiveExpression("a", tempa <- 33) ? 



I noticed that active bindings are very fast:

te$b <- expression(tempb <- 55)
system.time(evalq(for(i in 1:1e5) a, te))
   user  system elapsed 
   0.14    0.00    0.14 
system.time(evalq(for(i in 1:1e5) eval(b), te))
   user  system elapsed 
   0.57    0.02    0.57 

So, I would assume the active expressions would be even faster.

Thanks,
Vitalie.



[Rd] expressions as active bindings?
Vitalie S.