Rui et al. Certainly correct.
However, I think the use of force() and similar should be avoided if possible, as computing on the language can be tricky. So here is an alternative formulation that avoids it: faux <- function(c){ f <- get(paste0(c,"gamma")) ## evaluation of c is forced here function(x)f(x,k,scale=theta) } Now another way to do this is: faux <- function(c, nm = paste0(c,"gamma")){ f <- get(nm) function(x)nm(x,k,scale=theta)} This, in turn, suggests a more flexible function that would work for any distribution, using ... to pass in the arguments needed faux <- function(c, nm = "gamma",...){ f <- get(paste0(c,nm)) function(x)f(x,...) } This could be called with: > xgam <- lapply(c("p","d"), faux, shape=k, scale=theta) > xgam[[1]](1000) [1] 0.8710477 > xgam[[2]](1000) [1] 0.001265311 But it would also work for, e.g. "norm" > xnorm <- lapply(c("p","d"), faux, nm="norm", mean=5) > xnorm[[1]](6) [1] 0.8413447 > xnorm[[2]](6) [1] 0.2419707 Cheers, Bert P.S. Bill Dunlap might have something to say about this. I think there may be better ways to approach this whole business, but I prefer such insight from real experts. -- Bert On Wed, Jun 5, 2013 at 2:58 AM, Rui Barradas <ruipbarra...@sapo.pt> wrote: > Hello, > > My solution works but it is incorrect. We should force the argument 'c', not > the return value. Like said in the help page for force. Which I've only read > after my first post. The following way makes much more sense and is a bit > shorter. > > faux <- function(c) { > force(c) > function (x) get(paste0(c,"gamma"))(x,k,scale=theta) > } > > Rui Barradas > > Em 05-06-2013 10:49, Rui Barradas escreveu: >> >> Hello, >> >> If in faux we ?force the return value, the bug is gone. >> >> >> faux <- function(c) { >> f <- function (x) get(paste0(c,"gamma"))(x,k,scale=theta) >> force(f) >> f >> } >> >> Hope this helps, >> >> Rui Barradas >> >> Em 05-06-2013 07:13, Michael Weylandt escreveu: >>> >>> >>> >>> On Jun 5, 2013, at 3:53, Julio Sergio <julioser...@gmail.com> wrote: >>> >>>> I want to generate specific gamma distribution functions, given fixed >>>> parameters. >>>> This is I have k, and theta, say >>>> >>>> k <- 32.2549 # shape >>>> theta <- 26.32809 # scale >>>> >>>> >>>> # I have an auxiliary function that produces funcions according to >>>> # a given character (this is to have either dgamma, pgamma or qgamma) >>>> # for the specific parameters given above: >>>> >>>> faux <- function(c) { >>>> function (x) get(paste0(c,"gamma"))(x,k,scale=theta) >>>> } >>>> >>>> # So I can have, for instance, dgamma, and pgamma with >>>> >>>> dff <- faux("d") >>>> pff <- faux("p") >>>> >>>> dff(1000) >>>> ## [1] 0.001433138 >>>> >>>> pff(1000) >>>> ## [1] 0.844305 >>>> >>>> Now, if I try to produce both functions in one shot with lapply, the >>>> thing >>>> doesn't work, see >>>> >>>> ffs <- lapply(c("d", "p"), faux) >>>> >>>> ffs[[1]](1000) >>>> ## [1] 0.844305 >>>> >>>> ffs[[2]](1000) >>>> ## [1] 0.844305 >>>> >>>> The two produced functions are the very same and correspond to pgamma!! >>>> Maybe I'm missing something. Do you have any idea? >>> >>> >>> I think you are hitting a bit of strangeness R generously calls 'lazy >>> evaluation'. I'm afraid I don't have a reference at hand, but search >>> the archives for mention of the promise mechanism. >>> >>> MW >>> >>>> >>>> Thanks, >>>> >>>> -Sergio. >>>> >>>> ______________________________________________ >>>> R-help@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. >>> >>> >>> ______________________________________________ >>> R-help@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. >>> >> >> ______________________________________________ >> R-help@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. > > > ______________________________________________ > R-help@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. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm ______________________________________________ R-help@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.