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

Charles C. Berry ccberry at ucsd.edu
Fri Dec 11 03:24:52 CET 2015


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.


More information about the R-devel mailing list