[R] S4 : setGeneric for classical methods

cgenolin at u-paris10.fr cgenolin at u-paris10.fr
Sat Jul 26 12:12:12 CEST 2008


Martin Maechler <maechler at stat.math.ethz.ch> a écrit :

>>>>>> "CG" == Christophe Genolini <cgenolin at u-paris10.fr>
>>>>>>     on Tue, 22 Jul 2008 19:04:37 +0200 writes:
>
>    CG> Prof Brian Ripley <ripley at stats.ox.ac.uk> a écrit :
>    >> On Tue, 22 Jul 2008, cgenolin at u-paris10.fr wrote:
>    >>
>    >>> Hi the list (well, half of the list, only the one who
>    >>> are not on holidays...)
>    >>>
>    >>> I am trying to make an S4 package. When I run it on a
>    >>> console, everything seems ok. When I run R CMD check, I
>    >>> got an error --- 8<
>    >>> ----------------------
>    >>> Error in setMethod("plot", "ClassX", function(x, y) { :
>    >>> no existing definition for function "plot" --- 8<
>    >>> ----------------------
>    >>>
>    >>> If I add
>    >>> setGeneric("plot",function(x,y,...){standardGeneric("plot")})
>    >>> in my code, then everything is OK.
>    >>>
>    >>> This is a surprise for me since I taught that we do not
>    >>> need to redefine as generic the function that are
>    >>> already generic, like "plot". Am I wrong ?
>    >>
>    >> Yes. And do read the error message.  It says
>    >>
>    >> no existing definition for function "plot"
>    >>
>    >> so this is not if the function is S3 or S4 generic, but
>    >> that no such function is visible.
>    >>
>    >> Looks like you forgot to declare a dependence on (or
>    >> import) package graphics.
>
>    CG> I would have forgot if I knew that I have to declare
>    CG> such a dependence...  Do we have to declare all the
>    CG> depence to all the package ? To base ? To stats ?
>
> not to base, but to all other packages (since R can be loaded
> without any packages but base).
>
>    CG> I thaught that the package that are include in R when we
>    CG> start it had not to be include.
>
> You thought wrongly, and all our documentation mentions that you
> need to use 'Depends:' correctly (and  'Imports(..)' in
> NAMESPACE if you make use of one).
>
> {and please strongly note the correct spelling of "thought" !}
>
> Martin

I correct DESCRIPTION and NAMESPACE adding Depends and import.
But I still get the message :

checking for missing documentation entries ... WARNING
Undocumented S4 methods:
  generic 'plot' and siglist 'ClassX'

I can't find what is wrong...

----- DESCRIPTION ----- Package: packS4
Type: Package
Title: Toy example of S4 package
Version: 0.5
Date: 2008-07-22
Author: Christophe Genolini / INSERM U669
Maintainer: <genolini at u-paris10.fr>
Description: Package built to illustration package construction with S4
License: GPL (>=2)
LazyLoad: yes
Depends: methods, graphics
Collate: global.R ClassX.R ClassY.R ClassX-ClassY.R ClassZ.R


------ NAMESPACE ------
export(
    "classZ",
    "functionClassicA"
)
exportMethods(
    "getZ1",
    "setZ1<-",
    "publicA",
    "plot"
)
exportClasses(
    "ClassY",
    "ClassZ"
)

import(graphics)

Christophe



More information about the R-help mailing list