Re: [Rd] turning expression object to function

From: Tony Plate <tplate_at_acm.org>
Date: Mon 18 Dec 2006 - 18:17:25 GMT

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.)

 > 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@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed Dec 20 07:35:12 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Tue 19 Dec 2006 - 22:30:55 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.