Re: [Rd] Overwriting imported function in another package

From: Joshua Wiley <jwiley.psych_at_gmail.com>
Date: Mon, 08 Aug 2011 22:11:27 -0700

> [Jeroen Ooms wrote:]
>> > I am running into a limitation of the grid::grid.newpage function, for which I would like to overwrite this function
>> > with a slightly modified one. Hopefully this is a temporary working solution until the package gets updated. I found a
>> > way to overwrite the function in the package:grid namespace. However, lattice imports grid rather than depending on it.
>> > So I need a way to overwrite this imported version as well. The code below shows the fix which works for ggplot (because
>> > it depends on grid), but it doesn't work for lattice, because it imports grid. Is there any way to overwrite
>> > grid.newpage for all instantiations of it?
>
> [Duncan Murdoch wrote:]
>> But everyone who uses your code has a right to expect that other
>> packages are not affected by it.

<Mark.Bravington_at_csiro.au> wrote:
> One should of course only do such things reluctantly and responsibly, as Duncan points out; any changes shouldn't modify *expectable* behaviour of existing functions! But if it's just a bug-fix or innocuous extension of functionality, and/or just in one's own work, then I can see two approaches that might help.

As a user, I would be strongly opposed to this, even for "buggy" code.

> Second: *after* loading the offending package, (e.g. in the '.onLoad' of your own package, if you're putting this into a package) you could use 'fun.locator' in 'mvbutils' to find all instances of the offending function including imports, and then change each copy manually. An example is 'mtrace' in 'debug', which deliberately tries to find and change all copies of a function. (Whether 'fun.locator' finds absolutely every copy, I'm not sure, but it does try; NB it won't work as-is for S4, and needs to be used differently for ref classes.) This is uglier, but should be automatic (and should also ensure that any subsequent imports of the offender pick up the patched version, though I haven't checked).
>
> Note that this won't work retrospectively for copies that are imported into a package namespace under an alias, which I think used to be a theoretical possibility but may not be any more.

This strikes me as essentially as a package that, when installed/loaded "infects" other packages and software. R and CRAN are open source. If you need something different than what you have, make something different. You could make: JOsggplot2, JOslattice, etc. and have your package depend on those. User's do not need to compile from source, and rather than hijacking other packages, it is clear that a package similar to but different from ggplot2 and lattice is being used.

Josh



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 09 Aug 2011 - 05:18:22 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 09 Aug 2011 - 23:00:16 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive