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.

Reply via email to