On Fri, May 14, 2010 at 10:13 AM, Simon Urbanek <simon.urba...@r-project.org> wrote: > > On May 14, 2010, at 10:29 AM, Jeff Ryan wrote: > >> This isn't like a local variable though, since any function above the >> baseenv() in the search path will also not be found. >> > > Yes, but that is a consequence of the request and hence intended. You can > always either specify the full path to the function or assign locally any > functions you'll need: > >> f = function(a) stats::rnorm(b) >> environment(f) <- baseenv() >> f() > Error in stats::rnorm(b) : object 'b' not found > >> f = function(a) { rnorm=stats::rnorm; rnorm(b) } >> environment(f) <- baseenv() >> f() > Error in rnorm(b) : object 'b' not found > > Alternatively you can use any environment up the search path hoping that > those won't define further variables. > > But back to the original question -- if taken literally, it's quite useless > since it corresponds to using emptyenv() instead of baseenv() which means > that you can't do anything: > >> local(1+1,emptyenv()) > Error in eval(expr, envir, enclos) : could not find function "+" > > > So likely the only useful(?) distinction would be to allow function lookup > the regular way but change only the variable lookup to not look beyond the > current environment. That is stretching it, though...
I didn't think of the corner cases. I'm OK with stats::rnorm or stats:::rnorm. But '{' is not recognized. How to make it be recognized? b=1 f=function() { stats::rnorm(b) } f() #environment(f)=base() environment(f)=emptyenv() f() > Cheers, > Simon > > > > > >>> f >> function(a) { rnorm(b) } >> <environment: base> >> >>> f() >> Error in f() : could not find function "rnorm" >> >> Jeff >> >> On Fri, May 14, 2010 at 9:20 AM, Hadley Wickham <had...@rice.edu> wrote: >> >>>> Hello All, >>>> >>>> By default, a reference of a variable in a function cause R to look >>>> for the variable in the parent environment if it is not available in >>>> the current environment (without generating any errors or warnings). >>>> I'm wondering if there is a way to revert this behaviors, such that it >>>> will not look for the parent environment and will generate an error if >>>> the variable is not available in the current environment. Is this >>>> tuning has to be done at the C level? >>> >>> Try this: >>> b <- 1 >>> f <- function(a) { >>> b >>> } >>> >>> environment(f) <- baseenv() >>> f() >>> >>> Hadley >>> >>> -- >>> Assistant Professor / Dobelman Family Junior Chair >>> Department of Statistics / Rice University >>> http://had.co.nz/ >>> >>> ______________________________________________ >>> R-devel@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> >> >> >> >> -- >> Jeffrey Ryan >> jeffrey.r...@insightalgo.com >> >> ia: insight algorithmics >> www.insightalgo.com >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > -- Tom ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel