Thank Gabor and Duncan, That will be helpful.
Gabor Grothendieck wrote: > On Thu, Jan 6, 2011 at 4:59 PM, Duncan Murdoch <murdoch.dun...@gmail.com> > wrote: > >> On 06/01/2011 4:45 PM, Sebastien Bihorel wrote: >> >>> Dear R-users, >>> >>> Is there a way I can prevent global variables to be visible within my >>> functions? >>> >> Yes, but you probably shouldn't. You would do it by setting the environment >> of the function to something that doesn't have the global environment as a >> parent, or grandparent, etc. The only common examples of that are baseenv() >> and emptyenv(). For example, >> >> x <- 1 >> f <- function() print(x) >> >> Then f() will work, and print the 1. But if I do >> >> environment(f) <- baseenv() >> >> then it won't work: >> >> >>> f() >>> >> Error in print(x) : object 'x' not found >> >> The problem with doing this is that it is not the way users expect functions >> to work, and it will probably have weird side effects. It is not the way >> things work in packages (even packages with namespaces will eventually >> search the global environment, the namespace just comes first). There's no >> simple way to do it and yet get access to functions in other packages >> besides base without explicitly specifying them (e.g. you'd need to use >> stats::lm(), not just lm(), etc.) >> >> > > A variation of this would be: > > environment(f) <- as.environment(2) > > which would skip over the global environment, .GlobEnv, but would > still search the loaded packages. In the example above x would not be > found but it still could find lm, etc. > > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.