Allen McIntosh wrote: > Seth Falcon wrote: > >> Allen McIntosh <[EMAIL PROTECTED]> 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 think you can set the environment of your method to see the package internals. Those internals won't see your method, though.
To do this, you'd do something like newfoo <- function(obj , x, y) { new definition } environment(newfoo) <- environment(foo) # or some other function from the package setMethod("foo", signature(obj = "bar"), newfoo) > I was hoping to avoid recompiling and installing under Windows. Looks > like I may not have a choice. > This is getting easier: we're down to a single install, as long as you don't need all possible formats of man pages. Duncan Murdoch > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel