Duncan Murdoch wrote: > On 1/21/2008 9:58 AM, Thomas Petzoldt wrote: >> Hello Duncan, >> >> thank you very much for your prompt reply. When I interpret your answer >> correctly there seems to be no alternative than either: >> >> A) using lots of (possibly private) functions in the package or, >> B) define dummies for all functions which are in such lists or, >> C) ignore the NOTE, knowing that it is spurious (BTW: there are several >> prominent packages on CRAN with unresolved NOTEs).
[...] > There's another way, which is more R-like, if you really want to avoid > lots of private functions. That is to create your lists via a function, > and define the functions in the lists locally within the creator. That > is, something like this: > > MakeListA <- function() { > foo <- function() { > 1:10 > } > bar <-function() { > log(foo()) > } > return(list(foo = foo, bar = bar)) > } > > fListA <- MakeListA() > > This avoids the explicit environment manipulations. Because both foo > and bar are defined locally within MakeListA, they share an environment > there, and can see each other (and anything else you chose to define > locally within MakeListA.) [...] Cool! What about the following (AFAIK getting environments is "legal" as opposed to setting them): MakeListA <- function() { foo <- function() { 1:10 } bar <-function() { log(foo()) } return(as.list(environment())) } fListA <- MakeListA() makefun <- function(flist) { with(flist, function() bar() + foo() ) } toplevel <- makefun(fListA) toplevel() ## but it is not possible to naively replace functions afterwards: fListA$bar <- function() cos(foo()) toplevel <- makefun(fListA) toplevel() ## Error in bar() : could not find function "foo" Note that it's the same in the "explicit" and in the environment version. -- Thomas P. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel