From mtmorgan at fhcrc.org  Fri Aug 26 16:06:49 2011
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Fri, 26 Aug 2011 07:06:49 -0700
Subject: [Rd] methods() not listing some S3 plot methods...?
In-Reply-To: <1314359065.22902.12.camel@prometheus.geog.ucl.ac.uk>
References: <1314359065.22902.12.camel@prometheus.geog.ucl.ac.uk>
Message-ID: <4E57A879.1040601@fhcrc.org>

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.

> 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


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793



[Rd] methods() not listing some S3 plot methods...?
Martin Morgan