From tplate at acm.org  Mon Dec 18 19:17:25 2006
From: tplate at acm.org (Tony Plate)
Date: Mon, 18 Dec 2006 11:17:25 -0700
Subject: [Rd] turning expression object to function
In-Reply-To: <b0808fdc0612181006t5316da91pe6192333c03b2c94@mail.gmail.com>
References: <b0808fdc0612181006t5316da91pe6192333c03b2c94@mail.gmail.com>
Message-ID: <4586DB35.1070106@acm.org>

This is what I tried, and it seemed to work, but maybe others can give 
better ideas, and also explain why the first attempt to assign the 
formal arguments didn't work (but the second did.)

 > f <- function() NULL
 > formals(f) <- list(b=1, c=2)
 > f
function (b = 1)
2
 > formals(f) <- list(b=1, c=2)
 > f
function (b = 1, c = 2)
2
 > body(f)
[1] 2
 > body(f) <- expression(a+b+c)
 > f
function (b = 1, c = 2)
a + b + c
 > a <- 3
 > f()
[1] 6
 >

One thing you may want to be careful of is the environment of the function.

(If I don't start out with f having a NULL body, the first attempt to 
assign the formals works.)

-- Tony Plate

 > sessionInfo()
R version 2.4.0 (2006-10-03)
i386-pc-mingw32

locale:
LC_COLLATE=English_United States.1252;LC_CTYPE=English_United 
States.1252;LC_MONETARY=English_United 
States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252

attached base packages:
[1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"
[7] "base"

other attached packages:
     MASS  foreign
"7.2-29" "0.8-17"
 >

Antonio, Fabio Di Narzo wrote:
> Dear all,
> I have the following problem.
> 
> Given an expression object 'expr' containing a certain set of symbols
> (say 'a', 'b', 'c'), I would like to translate the expression object
> in an R function of, say, 'a', programmatically. Here an example of
> what I mean.
> 
> Given:
> 
>>expr <- expression(a+b+c)
> 
> 
> a call like:
> 
>>asFunctionOf(expr, 'a', list(b=1, c=2))
> 
> 
> should return a function (not necessarly formally) equivalent to
> 
>>function(a) a+1+2
> 
> 
> Some suggestions?
> 
> Best regards,
> Antonio.
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



[Rd] turning expression object to function
Tony Plate