[Rd] How do I reliably and efficiently hash a function?

Mark van der Loo mark.vanderloo at gmail.com
Fri Dec 11 11:49:17 CET 2015


In addition to what Charles wrote, you can also use 'local' if you don't
want a function that creates another function.

> f <- local({info <- 10; function(x) x + info})
> f(3)
[1] 13

best,
Mark


Op vr 11 dec. 2015 om 03:27 schreef Charles C. Berry <ccberry at ucsd.edu>:

> On Thu, 10 Dec 2015, Konrad Rudolph wrote:
>
> > I’ve got the following scenario: I need to store information about an
> > R function, and retrieve it at a later point. In other programming
> > languages I’d implement this using a dictionary with the functions as
> > keys. In R, I’d usually use `attr(f, 'some-name')`. However, for my
> > purposes I do not want to use `attr` because the information that I
> > want to store is an implementation detail that should be hidden from
> > the user of the function (and, just as importantly, it shouldn’t
> > clutter the display when the function is printed on the console).
> >
> > `comment` would be almost perfect since it’s hidden from the output
> > when printing a function — unfortunately, the information I’m storing
> > is not a character string (it’s in fact an environment), so I cannot
> > use `comment`.
> >
> > How can this be achieved?
> >
>
> See
>
> https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Scope
>
> For example, these commands:
>
> foo <- function() {info <- "abc";function(x) x+1}
> func <- foo()
> find("func")
> func(1)
> ls(envir=environment(func))
> get("info",environment(func))
> func
>
> Yield these printed results:
>
> : [1] ".GlobalEnv"
> : [1] 2
> : [1] "info"
> : [1] "abc"
> : function (x)
> : x + 1
> : <environment: 0x7fbd5c86bc60>
>
> The environment of the function gets printed, but 'info' and other
> objects that might exist in that environment do not get printed unless
> you explicitly call for them.
>
> HTH,
>
> Chuck
>
> p.s. 'environment(func)$info' also works.
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

	[[alternative HTML version deleted]]



More information about the R-devel mailing list