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

Reply via email to