Re: [Rd] Overwriting imported function in another package

From: Duncan Murdoch <murdoch.duncan_at_gmail.com>
Date: Mon, 08 Aug 2011 08:19:30 -0400

On 08/08/2011 7:02 AM, 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?

Yes, modify the source and recompile R.

Duncan Murdoch

> #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



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Mon 08 Aug 2011 - 12:22:46 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 - 16: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