[R] S4 : setGeneric for classical methods
Martin Maechler
maechler at stat.math.ethz.ch
Sat Jul 26 14:50:40 CEST 2008
>>>>> "CG" == Christophe Genolini <cgenolin at u-paris10.fr>
>>>>> on Sat, 26 Jul 2008 12:12:12 +0200 writes:
CG> 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
CG> I correct DESCRIPTION and NAMESPACE adding Depends and import.
CG> But I still get the message :
CG> checking for missing documentation entries ... WARNING
CG> Undocumented S4 methods:
CG> generic 'plot' and siglist 'ClassX'
CG> I can't find what is wrong...
well, it's a message about *documentation*
and therefore not related to DESCRIPTION
and not much related to NAMESPACE.
It tells you that you don't have correct documentation for the
plot method for ClassX.
--> "Writing R Extensions",
section 2.1.3 'Documenting S4 classes and methods'
Regards,
Martin
CG> ----- DESCRIPTION ----- Package: packS4
CG> Type: Package
CG> Title: Toy example of S4 package
CG> Version: 0.5
CG> Date: 2008-07-22
CG> Author: Christophe Genolini / INSERM U669
CG> Maintainer: <genolini at u-paris10.fr>
CG> Description: Package built to illustration package construction with S4
CG> License: GPL (>=2)
CG> LazyLoad: yes
CG> Depends: methods, graphics
CG> Collate: global.R ClassX.R ClassY.R ClassX-ClassY.R ClassZ.R
CG> ------ NAMESPACE ------
CG> export(
CG> "classZ",
CG> "functionClassicA"
CG> )
CG> exportMethods(
CG> "getZ1",
CG> "setZ1<-",
CG> "publicA",
CG> "plot"
CG> )
CG> exportClasses(
CG> "ClassY",
CG> "ClassZ"
CG> )
CG> import(graphics)
CG> Christophe
CG> ----------------------------------------------------------------
CG> Ce message a ete envoye par IMP, grace a l'Universite Paris 10 Nanterre
More information about the R-help
mailing list