[R] Trying to build up functions with its names by means of lapply
Michael Weylandt
michael.weylandt at gmail.com
Wed Jun 5 08:13:23 CEST 2013
On Jun 5, 2013, at 3:53, Julio Sergio <juliosergio at 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 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.
More information about the R-help
mailing list