[R] class export in package creation / setClass / namespace?

Martin Maechler maechler at stat.math.ethz.ch
Tue Jul 21 08:58:29 CEST 2009


>>>>> "MartinMo" == Martin Morgan <mtmorgan at fhcrc.org>
>>>>>     on Mon, 20 Jul 2009 18:57:33 -0700 writes:

    MartinMo> L L <lmlahti at gmail.com> writes:
    >> Ok, I could solve also the latter problem by defining show.myclass function in
    >> the zzz.R file and adding the line 'S3method(show,myclass)' into NAMESPACE
    >> file. Now the package passes all checks.

    MartinMo> I would have, in NAMESPACE,

    MartinMo> importFrom(methods, show)
    MartinMo> exportMethods(show)

    MartinMo> and in some file in R/

    MartinMo> setMethod(show, "myclass", function(object) {
    MartinMo> cat("here I am\n")
    MartinMo> })

    MartinMo> Do not try to make an S3 method on an S4 generic,
    MartinMo> or to create a new S4 generic for show. Since
    MartinMo> you've defined a method on show, you need to add
    MartinMo> documentation in a file in man/ (your choice; I'd
    MartinMo> add the documentation to the myclass documentation
    MartinMo> page). You only get one
    MartinMo> \alias{show,myclass-method}.

    MartinMo> Martin

Yes, indeed!
I'm just ``signing''  Martin Morgan's very good advice.

In case it was explicit enough: 
do *NOT* define  show.myclass()  [which is an S3 method for an
                                  S4 generic and S4 class ..]

Martin Mächler


    >> The information on how to exactly extend existing methods and include new
    >> methods/classes into a package is available but rather scattered in the web. A
    >> step-by-step tutorial written by an experienced user who is aware of best
    >> practices etc. would be rather useful for a beginner.
    >> best regards
    >> Leo
    >> 
    >> 
    >> On Mon, Jul 20, 2009 at 7:09 PM, L L <[[lmlahti at gmail.com]]> wrote:
    >> 
    >> Thanks, the issue was solved by adding class definitions to the
    >> zzz.R file in the R code directory. However, this led to a new
    >> problem.     
    >> The zzz.R now contains class definition:     
    >> > setClass("myclass", contains = "list")     
    >> and  method definition for the new class, extending the generic
    >> show':     
    >> > setGeneric("show",function(x,...){standardGeneric("show")})     >
    >> setMethod("show", "myclass",function(x, ...) {cat("myclass object
    >> \n")})     
    >> I get two warnings. The first one:     
    >> * checking Rd files ... WARNING     Rd files with duplicated alias
    >> show,myclass-method':       myclass-class.Rd show-methods.Rd     
    >> I get this one because the alias row for the method
    >> (\alias{show,myclass-method}) is in both myclass-class.Rd file and
    >> show-methods.Rd file (created by promptMethods function). This is
    >> likely related to the second warning:     
    >> * checking for missing documentation entries ... WARNING     Undocumented
    >> code objects:       show     
    >> I thought that the show method would've been documented correctly as
    >> I put 'show-methods.Rd' file in the 'man' directory. This does not
    >> seem to be the case, however.     
    >> Any help on how I should document the extended show method in this
    >> case, or are there some mistakes in my original definition for
    >> extended 'show'? I could not find suitable examples from the
    >> web/mailing lists.     
    >> br     Leo




More information about the R-help mailing list