Liaw, Andy
2004-Sep-29 12:13 UTC
[R] defining a template for functions via do.call and substit ute.
Here's one not-so-straightforward way:> f <- function(a, b) a + b > flist <- as.list(f) > names(flist)[1:2] <- c("x", "y") > flist[[3]] <- do.call("substitute", list(body(f), list(a=as.name("x"),b=as.name("y"))))> g <- as.function(flist) > gfunction (x, y) x + y HTH, Andy> From: john.gavin at ubs.com > > Hi, > > Given a function > > fun <- function(a, b) a + b > > how do I generate the function 'function(x, y) x + y'? > > Working from the help files and Bill Venables' R-news article > (June 2002), > I have tried various permutations with substitute without success. > e.g. > do.call("substitute", list(fun, list(a = as.name("x"), b = > as.name("y")))) > > Regards, > > John. > > John Gavin <john.gavin at ubs.com>, > Quantitative Risk Models and Statistics, > UBS Investment Bank, 6th floor, > 100 Liverpool St., London EC2M 2RH, UK. > Phone +44 (0) 207 567 4289 > Fax +44 (0) 207 568 5352 > > Visit our website at http://www.ubs.com > > This message contains confidential information and is > intend...{{dropped}} > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > >
Dimitris Rizopoulos
2004-Sep-29 12:43 UTC
[R] defining a template for functions via do.call and substit ute.
Or a slight modification
fun <- function(a, b) a+b
####
g <- function(){}
body(g) <- do.call("substitute", list(body(fun),
list(a=as.name("x"),
b=as.name("y"))))
formals(g) <- alist(x=, y=)
g
Best,
Dimitris
----
Dimitris Rizopoulos
Ph.D. Student
Biostatistical Centre
School of Public Health
Catholic University of Leuven
Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/16/396887
Fax: +32/16/337015
Web: http://www.med.kuleuven.ac.be/biostat/
http://www.student.kuleuven.ac.be/~m0390867/dimitris.htm
----- Original Message -----
From: "Liaw, Andy" <andy_liaw at merck.com>
To: <john.gavin at ubs.com>; <r-help at stat.math.ethz.ch>
Sent: Wednesday, September 29, 2004 2:13 PM
Subject: RE: [R] defining a template for functions via do.call and
substit ute.
> Here's one not-so-straightforward way:
>
>> f <- function(a, b) a + b
>> flist <- as.list(f)
>> names(flist)[1:2] <- c("x", "y")
>> flist[[3]] <- do.call("substitute", list(body(f),
>> list(a=as.name("x"),
> b=as.name("y"))))
>> g <- as.function(flist)
>> g
> function (x, y)
> x + y
>
> HTH,
> Andy
>
>> From: john.gavin at ubs.com
>>
>> Hi,
>>
>> Given a function
>>
>> fun <- function(a, b) a + b
>>
>> how do I generate the function 'function(x, y) x + y'?
>>
>> Working from the help files and Bill Venables' R-news article
>> (June 2002),
>> I have tried various permutations with substitute without success.
>> e.g.
>> do.call("substitute", list(fun, list(a =
as.name("x"), b >> as.name("y"))))
>>
>> Regards,
>>
>> John.
>>
>> John Gavin <john.gavin at ubs.com>,
>> Quantitative Risk Models and Statistics,
>> UBS Investment Bank, 6th floor,
>> 100 Liverpool St., London EC2M 2RH, UK.
>> Phone +44 (0) 207 567 4289
>> Fax +44 (0) 207 568 5352
>>
>> Visit our website at http://www.ubs.com
>>
>> This message contains confidential information and is
>> intend...{{dropped}}
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide!
>> http://www.R-project.org/posting-guide.html
>>
>>
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide!
> http://www.R-project.org/posting-guide.html
>
Berton Gunter
2004-Sep-29 17:25 UTC
[R] defining a template for functions via do.call and substit ute.
THE FLAW! :-( -- Bert> -----Original Message----- > From: Liaw, Andy [mailto:andy_liaw at merck.com] > Sent: Wednesday, September 29, 2004 10:11 AM > To: 'Berton Gunter' > Subject: RE: [R] defining a template for functions via > do.call and substit ute. > > Bert, > > I thought about that, too, but I believe that approach is not > as safe, as > one could run into trouble if the body of the function has > something like > aCupOfCofee + someCream, which would ended up as xCupOfCofee > + someCrexm... > > Cheers, > Andy