From gavin.simpson at ucl.ac.uk  Sat Aug 27 00:17:03 2011
From: gavin.simpson at ucl.ac.uk (Gavin Simpson)
Date: Fri, 26 Aug 2011 23:17:03 +0100
Subject: [Rd] methods() not listing some S3 plot methods...?
In-Reply-To: <4E57A879.1040601@fhcrc.org>
References: <1314359065.22902.12.camel@prometheus.geog.ucl.ac.uk>
	<4E57A879.1040601@fhcrc.org>
Message-ID: <1314397023.2674.2.camel@chrysothemis.geog.ucl.ac.uk>

On Fri, 2011-08-26 at 07:06 -0700, Martin Morgan wrote:
> On 08/26/2011 04:44 AM, Gavin Simpson wrote:
> > Dear List,
> >
> > This may be related to this email thread initiated by Ben Bolker last
> > month: https://stat.ethz.ch/pipermail/r-devel/2011-July/061630.html
> >
> > In answering this Question on StackOverflow
> > http://stackoverflow.com/q/7195628/429846 I noticed that `methods()` was
> > not listing some S3 methods for `plot()` provided by the mgcv package.
> 
> Hi Gavin --
> 
> In the mgcv NAMESPACE, the methods is not registered with S3method 
> (which would have made it appear with a *) and is not export'ed; the 
> author of the package apparently intends that it be strictly internal to 
> the package. Dispatch works within the package name space, but not 
> outside, e.g., a=list; class(a) = "mgcv.smooth"; plot(a) ends up at 
> plot.default.

Thanks for the explanation Martin. This strikes me as being somewhat
suboptimal and not conducive to studying and understanding code. Now
that I am aware of the distinction I won't be surprised when methods
don't show up.

Cheers

G

> > At the time I wanted to check the development version of R as I recalled
> > Uwe mentioning that `plot.function` was listed by `methods()` there but
> > not in R2.13.x. I have now compiled the development version on two
> 
> It looks like the cog that has changed between release and devel is the 
> addition of export(plot.function) and S3method(plot, "function") to the 
> NAMESPACE of graphics.
> 
> Martin
> 
> > Fedora installations and certain plot methods are still not being
> > listed. Details of the exact revision of R Devel are shown at the end of
> > this email.
> >
> > As an example, consider:
> >
> >> require(mgcv)
> > Loading required package: mgcv
> > This is mgcv 1.7-6. For overview type 'help("mgcv-package")'.
> >> methods("plot")
> >   [1] plot.acf*              plot.ACF*              plot.augPred*
> >   [4] plot.compareFits*      plot.data.frame*       plot.decomposed.ts*
> >   [7] plot.default           plot.dendrogram*       plot.density
> > [10] plot.ecdf              plot.factor*           plot.formula*
> > [13] plot.function          plot.gam               plot.gls*
> > [16] plot.hclust*           plot.histogram*        plot.HoltWinters*
> > [19] plot.intervals.lmList* plot.isoreg*           plot.lm
> > [22] plot.lme*              plot.lmList*           plot.medpolish*
> > [25] plot.mlm               plot.nffGroupedData*   plot.nfnGroupedData*
> > [28] plot.nls*              plot.nmGroupedData*    plot.pdMat*
> > [31] plot.ppr*              plot.prcomp*           plot.princomp*
> > [34] plot.profile.nls*      plot.ranef.lme*        plot.ranef.lmList*
> > [37] plot.shingle*          plot.simulate.lme*     plot.spec
> > [40] plot.stepfun           plot.stl*              plot.table*
> > [43] plot.trellis*          plot.ts                plot.tskernel*
> > [46] plot.TukeyHSD          plot.Variogram*
> >
> >     Non-visible functions are asterisked
> >
> >> pmeth<- methods("plot")
> >> grep("plot.mgcv.smooth", pmeth)
> > integer(0)
> >> getS3method("plot", "mgcv.smooth")
> > Error in getS3method("plot", "mgcv.smooth") :
> >    S3 method 'plot.mgcv.smooth' not found
> >> pfun<- getAnywhere("plot.mgcv.smooth")
> >> str(pfun)
> > List of 5
> >   $ name   : chr "plot.mgcv.smooth"
> >   $ objs   :List of 1
> >    ..$ :function (x, P = NULL, data = NULL, label = "", se1.mult = 1,
> >      se2.mult = 2, partial.resids = FALSE, rug = TRUE, se = TRUE,
> >      scale = -1, n = 100, n2 = 40, pers = FALSE, theta = 30, phi = 30,
> >      jit = FALSE, xlab = NULL, ylab = NULL, main = NULL, ylim = NULL,
> >      xlim = NULL, too.far = 0.1, shade = FALSE, shade.col = "gray80",
> >      shift = 0, trans = I, by.resids = FALSE, scheme = NULL, ...)
> >   $ where  : chr "namespace:mgcv"
> >   $ visible: logi FALSE
> >   $ dups   : logi FALSE
> >   - attr(*, "class")= chr "getAnywhere"
> >
> > Both `methods()` and `getS3method()` don't list/find this method, but
> > the function exists in the mgcv name space and this method will be used
> > via R's S3 dispatch system in `plot.gam()`.
> >
> > Shouldn't this method be returned by either `methods()` or
> > `getS3method()`?
> >
> > TIA,
> >
> > Gavin
> >
> >> sessionInfo()
> > R Under development (unstable) (2011-08-26 r56801)
> > Platform: x86_64-unknown-linux-gnu (64-bit)
> >
> > locale:
> >   [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C
> >   [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8
> >   [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8
> >   [7] LC_PAPER=C                 LC_NAME=C
> >   [9] LC_ADDRESS=C               LC_TELEPHONE=C
> > [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
> >
> > attached base packages:
> > [1] stats     graphics  grDevices utils     datasets  methods
> > base
> >
> > other attached packages:
> > [1] mgcv_1.7-6
> >
> > loaded via a namespace (and not attached):
> > [1] grid_2.14.0        lattice_0.19-33    Matrix_0.9996875-3
> > nlme_3.1-102
> > [5] tools_2.14.0
> 
> 

-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



[Rd] methods() not listing some S3 plot methods...?
Gavin Simpson