[R] generate simple function with pre-defined constants

Liviu Andronic landronimirc at gmail.com
Sun Jun 9 14:49:46 CEST 2013


Dear Bill,


On Thu, Jun 6, 2013 at 5:36 PM, William Dunlap <wdunlap at tibco.com> wrote:
> Try the following:
>    generateABFunction <- function(a, b) {
>       force(a)
>       force(b)
>       function(x) a*x + b
>    }
>    f12 <- generateABFunction(1, 2)
>    f53 <- generateABFunction(5,6)
>    f12(10:12) # get 12, 13, 14
>    f53(10:12) # get 56, 61, 66
>
> See, e.g., yesterday's discussion under the subject
> "Trying to build up functions with its names by means of lapply"
> on why the force() calls are required.  Read up on R's environments
> to see why f12 and f53 look the same but act differently (hint:
> look at ls.str(environment(f12))).
>
This is exactly what I was trying to do. Thank you for the explanations,
Liviu


> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
>
>
>> -----Original Message-----
>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
>> Of Liviu Andronic
>> Sent: Thursday, June 06, 2013 8:00 AM
>> To: r-help at r-project.org Help
>> Subject: Re: [R] generate simple function with pre-defined constants
>>
>> On Thu, Jun 6, 2013 at 4:48 PM, Liviu Andronic <landronimirc at gmail.com> wrote:
>> > Dear all,
>> > Given:
>> > a <- 2
>> > b <- 3
>> >
>> > I'd like to obtain the following function:
>> > f <- function(x) 2 + 3*x
>> >
>> > but when I do this:
>> > f <- function(x) a + b*x
>> > ##f
>> > ##function(x) a + b*x
>> >
>> > the 'a' and 'b' objects do not get evaluated to their constants. How
>> > could I do that?
>> >
>> I found one solution:
>> a <- 2
>> b <- 3
>> f <- eval(parse(text=paste("function(z)", a, "+ z * ", b)))
>> f
>> ##function(z) 2 + z *  3
>>
>> but I still have nightmares from:
>> > fortune("parse")
>>
>> If the answer is parse() you should usually rethink the question.
>>    -- Thomas Lumley
>>       R-help (February 2005)
>>
>> Is there a nicer way to approach this? Thanks,
>> Liviu
>>
>>
>> > Thanks,
>> > Liviu
>> >
>> >
>> > --
>> > Do you know how to read?
>> > http://www.alienetworks.com/srtest.cfm
>> > http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
>> > Do you know how to write?
>> > http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail
>>
>>
>>
>> --
>> Do you know how to read?
>> http://www.alienetworks.com/srtest.cfm
>> http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
>> Do you know how to write?
>> http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.



-- 
Do you know how to read?
http://www.alienetworks.com/srtest.cfm
http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
Do you know how to write?
http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail



More information about the R-help mailing list