Re: [Rd] S4 Method dispatch in recent 2.4.0alpha

From: Oosting, J. (PATH) <J.Oosting_at_lumc.nl>
Date: Tue 12 Sep 2006 - 21:42:52 GMT

Your suggestions worked ok in the example, but in my case there is yet another package that implements a plot method. Now the plotting from within the package works, but plotting from outside the package, on the console, gives an error as if plot.default is invoked.
> class(myplot)

[1] "gt.barplot"
attr(,"package")
[1] "globaltest"

> plot(myplot)

Error in xy.coords(x, y, xlabel, ylabel, log) :

        'x' and 'y' lengths differ

Rgraphviz implements a plot method on 2 classes: graph and Ragraph multtest implements a plot method on 1 class: MTP

globaltest, the package i'm working on, depends on multtest, and suggests Rgraphviz. Class gt.barplot implements a plot method

the output of showMethods("plot")
> showMethods("plot")

Function: plot, (package graphics)

x="ANY"
x="graph"
x="gt.barplot"
x="MTP"
x="Ragraph"

Rgraphviz has a proper NAMESPACE and I created one for multtest that imports plot from graphics, and exports plot as a method, because they are not dependent on each other that does seem ok. In globaltest I import the plot method from multtest.

How to deal with this.

> sessionInfo()

R version 2.4.0 alpha (2006-09-11 r39258) i386-pc-mingw32

locale:
LC_COLLATE=Dutch_Netherlands.1252;LC_CTYPE=Dutch_Netherlands.1252;LC_MONETARY=Dutch_Netherlands.1252;LC_NUMERIC=C;LC_TIME=Dutch_Netherlands.1252

attached base packages:

[1] "splines"   "tools"     "methods"   "stats"     "graphics"  "grDevices"
[7] "utils"     "datasets"  "base"     

other attached packages:
  Rgraphviz geneplotter     GOstats    Category    hgu95av2  genefilter 
  "1.11.10"    "1.11.8"    "1.7.11"     "1.5.9"    "1.13.0"    "1.11.8" 
       RBGL    annotate       graph       Ruuid          GO        KEGG 
    "1.9.9"    "1.11.5"   "1.11.14"    "1.11.2"    "1.13.0"    "1.13.0" 
     hu6800  globaltest    multtest    survival         vsn  golubEsets 
   "1.13.0"     "4.3.5"    "1.11.2"      "2.28"    "1.11.2"     "1.3.1" 
    Biobase
  "1.11.34"
 

John Chambers wrote:
> Good example.
>
>The basic problem is in the NAMESPACE file:
>
>importFrom(graphics, plot)
>
>But the version of plot() in the graphics package is not a generic function. Therefore, when your mpplot() calls it there is no >method dispatch.
>
>You need to import the generic version of plot() from minipkg2 (notice that there's a message about creating a new generic for >plot() when you install minipkg2).
>
>The line in the NAMESPACE file should be:
>
>importFrom(minipkg2, plot)
>
>In your mini-example, there are some additional steps needed, not directly related to the problem & possibly not true in the >real example.
>
>1. minipkg2 also needs a NAMESPACE, in which it imports from methods and graphics and exports plot and the class mp2.plot >(example attached).
>
>2. Highly recommended though maybe not required here is to use some form of saved image, e.g. by including "LazyLoad:yes" in >the two DESCRIPTION files.
>
>John

Oosting, J. (PATH) wrote:

	I use 2 packages that both implement a S4 plot method, where one package
	depends on the other (the bioconductor package globaltest which depends
	on multtest). When the plot method is used from within the package, it
	seems the default plot method is used, and an error is generated. When
	the method is invoked from the console, the plot is created correctly. I
	have reproduced this with 2 small packages (minipkg and minipkg2)
	implementing just this part.
	I've seen a thread about a similar problem, but that seemed mostly due
	to already installed packages not handling the new S4 stuff.
	
	mpplot() is a function that creates a class instance and (usually)
	invokes the plot immediately. When the dependency on minipkg2 is removed
	from the DESCRIPTION file the first call to mpplot() gives no error and
	shows the plot.
	
	
	Jan Oosting
	
	  

		library(minipkg)
		    

	Loading required package: minipkg2
	Creating a new generic function for 'plot' in 'minipkg2'
	  

		mpplot(1:10)
		    

	Error in as.vector(x, "double") : cannot coerce to vector
	  

		plot(mpplot(1:10,plot=FALSE)) # this shows a proper plot
		showMethods("plot")
		    

	Function: plot, (package graphics)
	x="ANY"
	x="mp.plot"
	x="mp2.plot"
	  

		sessionInfo()
		    

	R version 2.4.0 Under development (unstable) (2006-09-04 r39086) 
	i386-pc-mingw32 
	
	locale:
	LC_COLLATE=Dutch_Netherlands.1252;LC_CTYPE=Dutch_Netherlands.1252;LC_MON
	ETARY=Dutch_Netherlands.1252;LC_NUMERIC=C;LC_TIME=Dutch_Netherlands.1252
	
	attached base packages:
	[1] "methods"   "stats"     "graphics"  "grDevices" "utils"
	"datasets" 
	[7] "base"     
	
	other attached packages:
	 minipkg minipkg2 
	 "1.0.0"  "1.0.0" 
	  

		
		
________________________________


		______________________________________________
		R-devel@r-project.org mailing list
		https://stat.ethz.ch/mailman/listinfo/r-devel
		    



	[[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed Sep 13 07:46:40 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Wed 13 Sep 2006 - 19:30:06 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.