[Rd] scoping goes wrong when some functions are used within others.

Duncan Murdoch murdoch.duncan at gmail.com
Fri Oct 1 19:49:55 CEST 2010


  On 01/10/2010 12:00 PM, Joris Meys wrote:
> Dear,
>
> I'm following the r tag on stackoverflow.com, and couldn't but notice
> there are quite some questions popping up that deal with scoping in
> relation to custom functions. I grinded my teeth on it already, and I
> have absolutely no clue what goes wrong. The general pattern is as
> follows :

I think each of the reports is really a separate bug, mostly in the 
implementation of "some_function". As far as I could see, only the last one

|y<- new.env()
with(y, x<- 1)
f<- function(env,z) {
     with(env, x+z)
}
f(y,z=1)
|

involves base R functions, and there I think the problem is with your 
reading of the documentation, not with the function. The documentation 
may suggest that should work by saying "The environment has the caller's 
environment as its parent", but there's no way it possibly could. 
Environments only have one parent. If you read carefully you'll see that 
this is documented correctly in "(Note: if ‘data’ is already an 
environment then this is used with its existing parent.)"

Duncan Murdoch

> ff<- function(x){
>      y<- some_value
>      some_function(y)
> }
>
> >  ff(x)
> Error in eval(expr, envir, enclos) : object 'y' not found
>
> I tried to report this as a bug earlier, but got the message I used
> the wrong channel. I also don't know how to formalize it into a bug
> report on the report site. That's why I bring it to your attention
> this way, and want to ask you whether this is by design and we're all
> doing something wrong, whether these are problems within certain
> packages/situations, ...
>
> I solve these problems now by adding an environment to my global
> environment, and delete it after the function finished running. But
> this can't be the correct way.
>
> The problem is described here :
> http://stackoverflow.com/questions/3840769/scoping-and-functions-in-r-2-11-1-whats-going-wrong
>
> Links to different reports, all having that same pattern but with
> different functions :
>
> http://stackoverflow.com/questions/3742415/r-statistical-scoping-error-using-transformby-part-of-the-doby-package
> http://stackoverflow.com/questions/3768417/how-to-use-acast-reshape2-within-a-function-in-r
> http://stackoverflow.com/questions/3661500/why-cant-i-pass-a-dataset-to-a-function
> http://stackoverflow.com/questions/3574858/values-not-being-copied-to-the-next-local-environment
> http://stackoverflow.com/questions/2646402/using-functions-and-environments
>
>



More information about the R-devel mailing list