[Rd] turning expression object to function

Tony Plate tplate at acm.org
Mon Dec 18 19:17:25 CET 2006


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
>



More information about the R-devel mailing list