[Rd] assignInNamespace and new bindings

Thomas Friedrichsmeier thomas.friedrichsmeier at ruhr-uni-bochum.de
Wed Jun 1 08:44:56 CEST 2011


Hi,

On Tuesday 31 May 2011, luke-tierney at uiowa.edu wrote:
> Yes you should. Changing things in other people's packages is not a
> safe thing to do.

sorry to insist, but I was hoping for a slightly more specific pointer. I'll 
try asking it another way:

Suppose I was using assignInNamespace() entirely bona fide, i.e. to develop and 
test patches with the intent to offer them to the package maintainer(s) for 
inclusion. What sort of gotchas should I be looking out for, specifically with 
respect to the compiler? Also, if the package that I'm trying to improve is a 
base package?

Regards
Thomas

P.S.: Just to let you know, why I do not feel too much ashamed or scared of 
changing things in other people's packages, here's (slighlty simplified) the 
pattern that I'm following:

backup <- original
replacement <- function() {
      call.my.hook()
      eval(body(backup))
}
formals(replacement) <- formals(backup)
environment(replacement) <- environment(backup)
assignInNamespace(...)

I know that leaves subtle differences beyond anything the compiler may be 
doing, such as in the sys.calls(). I am also pretty certain that these subtle 
differences are completely irrelevant *in those functions that I modify* this 
way. And I have a bunch of automated tests to make me sleep better, too.

Ok, and for a select few functions, my replacements are more "radical", such 
as for utils::savehistory(). But then, that is essentially non-functional in 
my use-case in its original incarnation, in the first place, so I'm not really 
scared of making things worse, there, either.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20110601/553724cf/attachment.bin>


More information about the R-devel mailing list