On Tue, Aug 5, 2014 at 1:49 PM, Grant Rettke <g...@wisdomandwonder.com> wrote: > > Hi, > > Today I got curious about whether or not I /could/ remove `attach' from > my system so: > - Backed it up > - Implemented a new one > - Like this > > ,---- > | attach.old <<- attach > | attach <<- function(...) {stop("NEVER USE ATTACH")} > `---- > > I got the error: > > ,---- > | Error: cannot change value of locked binding for 'attach' > `---- > > If I unlock `attach' I assume that I could stomp on it... however is > that even a good idea? > > What will I break?
If you change the base package environment's copy of `attach` (via `as.environment('package:base')`) , probably not much will break, except for your own code. If, on the other hand, you change the base namespace's copy of `attach` (via `asNamespace('base')`, any package that's subsequently loaded and uses `attach` would run into problems. Still, either way is probably not a good idea. I agree with Ista: assigning it yourself in the the global environment is a better idea. If you want to keep your global env clear of stuff like this, you can put it in an environment and attach that environment as a parent of global: e <- new.env() e$attach <- function(...) {stop("NEVER USE ATTACH")} base::attach(e, name = "my_stuff", warn.conflicts = FALSE) # Test it out: attach() # You can see that the "my_stuff" env is the parent of global env search() -Winston ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel