From mcintosh at research.telcordia.com  Sat Aug 18 21:53:07 2007
From: mcintosh at research.telcordia.com (Allen McIntosh)
Date: Sat, 18 Aug 2007 15:53:07 -0400
Subject: [Rd] Overriding S4 methods in an installed package
In-Reply-To: <m28x88u4em.fsf@fhcrc.org>
References: <200708172217.l7HMHG6a025509@mcintosh.research.telcordia.com>
	<m28x88u4em.fsf@fhcrc.org>
Message-ID: <46C74E23.10408@research.telcordia.com>

Seth Falcon wrote:
> Allen McIntosh <mcintosh at research.telcordia.com> writes:
>> Is it possible to override S4 methods in an installed package?
>> The naive
>> library("pkg")
>> setMethod("foo", signature(obj = "bar"),
>>         function(obj , x, y) { new definition }
>> 	, where="package:pkg")
>> results in the error
>> Error in setMethod("foo", signature(obj = "bar"), function(obj,  :
>>         the environment "pkg" is locked; cannot assign methods for function "foo"
> 
> If foo is a generic that you are calling directly, then you can
> probably define it in the global environment (omit the where arg) and
> test it that way.
> 
> OTOH, if foo is used by pkg internally, then it will be much easier to
> simply edit the source for pkg, reinstall and test.  If you find and
> fix a bug, most package maintainers will be quite happy to integrate
> your fix.

Thanks for the suggestion.  Unfortunately, foo() uses internal 
functions.  When foo() is defined in the global environment, these are 
not visible.

I was hoping to avoid recompiling and installing under Windows.  Looks 
like I may not have a choice.



[Rd] Overriding S4 methods in an installed package
Allen McIntosh