[Rd] Is it a good idea or even possible to redefine attach?

Winston Chang winstonchang1 at gmail.com
Tue Aug 5 21:47:36 CEST 2014


On Tue, Aug 5, 2014 at 1:49 PM, Grant Rettke <gcr at 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



More information about the R-devel mailing list