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. -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com ______________________________________________ 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.