[Rd] Overwriting imported function in another package

From: Jeroen Ooms <jeroen.ooms_at_stat.ucla.edu>
Date: Mon, 08 Aug 2011 13:02:52 +0200


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?

#packages

library(grid);
library(lattice);
library(ggplot2);

#create the modified function.

hookfun <- deparse(body(plot.new))[1:6]
oldfun <- deparse(body(grid::grid.newpage))[-1]; newfun <- grid::grid.newpage;
body(newfun) <- parse(text=c(hookfun, oldfun));

#overwrite it in the package

unlockBinding("grid.newpage", as.environment("package:grid")) assign("grid.newpage", newfun, pos="package:grid")

#this seems ok:

get('grid.newpage', as.environment("package:grid")); get('grid.newpage', as.environment("package:lattice"));

#but this is still the old one

get('grid.newpage', environment(histogram));

#test if it worked:

setHook("before.plot.new", function() {message("Yay! A new plot.");}); qplot(rnorm(100)); #it worked for ggplot2 histogram(rnorm(100)); #didn't work for lattice



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon 08 Aug 2011 - 11:05:51 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 Mon 08 Aug 2011 - 13:50:15 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