From maechler at stat.math.ethz.ch  Fri Nov 12 11:14:26 2010
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Fri, 12 Nov 2010 11:14:26 +0100
Subject: [Rd] S4 package warning
In-Reply-To: <4CDA6B9A.6060709@cam.ac.uk>
References: <4CDA6B9A.6060709@cam.ac.uk>
Message-ID: <19677.4994.66614.830107@lynne.math.ethz.ch>

>>>>> Robin Hankin <rksh1 at cam.ac.uk>
>>>>>     on Wed, 10 Nov 2010 09:53:30 +0000 writes:

    > Hello everyone.  R-2.12.0, suse linux 11.3.
    > I am debugging a package that uses S4 methods
    > and R CMD check gives the following warning:

    >> Warning in methods::findMethods(g, env) :
    >> non-generic function 'mdm' given to findMethods()
    >> See the information on DESCRIPTION files in the chapter 'Creating R
    >> packages' of the 'Writing R Extensions' manual.

    > I don't see anything obvious in that part of the R-exts but
    > FWIW, here is my DESCRIPTION file:

    >> Package: multivator
    >> Type: Package
    >> Title: A multivariate emulator
    >> Version: 1.0-1
    >> Depends: R(>= 2.10.0), emulator, methods, utils
    >> Date: 2009-10-27
    >> Author: Robin K. S. Hankin
    >> Maintainer:  <hankin.robin_nospamAT_gmail.com>
    >> Description: A multivariate generalization of the emulator package
    >> License: GPL-2
    >> LazyLoad: yes


    > I think that the lines in question in my package are:

    >> setClass("mdm", # "mdm" == "multivariate design matrix"
    >> representation = representation(
    >> xold  = "matrix",
    >> types = "factor"
    >> )
    >> )
    >> 
    >> 
    >> setGeneric("mdm",function(xold,types){standardGeneric("mdm")})
    >> setMethod("mdm",signature("matrix","factor"),function(xold, types){
    >> new("mdm", xold=xold, types=types)
    >> } )

    > which appear to execute without warning on a virgin console.  In the
    > package, there are three
    > or four other S4 classes which are on the same footing as the mdm class,
    > but do not appear to generate a warning from R CMD check.
    > The same happens AFAICS on R-2.13, 53543

    > Can anyone advise on how to deal with the warning?

It is probably simply the *order* of your R/*.R files which matters:
The setGeneric() has to come before all its setMethod()s.

A maintenance-intensive solution to the problem is to use a
'Collate:' field in your DESCRIPTION.
A much simpler approach is what we've done in the Matrix
package: use  R/AllClasses.R   and  R/AllGenerics.R
to put all setClass(.) and all setGeneric(.) calls,
respectively.
(and ensure not to use other file names that collate *before*
 'All*' in some locales).

Martin




    > thank you

    > Robin




    > -- 
    > Robin K. S. Hankin
    > Uncertainty Analyst
    > University of Cambridge
    > 19 Silver Street
    > Cambridge CB3 9EP
    > 01223-764877

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



[Rd] S4 package warning
Martin Maechler