[Rd] Some more help on S4 mechanism
Martin Morgan
mtmorgan at fhcrc.org
Mon Mar 22 18:01:26 CET 2010
On 03/22/2010 05:31 AM, Renard Didier wrote:
> Hello to the list
>
> Some days ago, I placed a question on this maling-list and received an
> answer from Martin
> that I tried to follow. Unfortunately, I am still puzzled by the next step.
> I spent the whole Week-end in gathering information from the net.
> Some of them are almost contridtcory and I lack a good document to help me.
Sometimes it is better to stick closer to the documentation, e.g.,
'Writing R Extensions', help(package="methods"), ?Methods, ?Classes.
> So my first question would beL Is there a convenient document which tells
> a standard user, who laready developped a package with S3, on how to
> migrate
> to the S4 mechanism.
>
> Secondly, this is my problem:
> According to Martin, now I use a NAMESPACE (as follows):
>
> import (methods)
> exportPattern("^[^0]*$")
> exportMethods(
> "[","[<-","$","$<-",
> "plot","print"
> )
> exportClasses(
> "anam","db","model","rule","vardir","vario","tokens","thresh"
> )
> useDynLib("RGeoS")
> importFrom(graphics,plot)
>
> More over, in the R directory, I have a zzz.lib with the following
> contents (.onLoad) :
>
> ".onLoad" <-
> function(...)
> {
>
> # Define the Classes #
> All0.Classes()
Usually, classes are NOT defined in a function. Instead of
SomeFile.R:
----------
All0.Classes <- function() {
setClass("Foo", <...>)
<etc>
}
----------
you would simply
SomeFile.R
----------
setClass("Foo", <...>)
----------
where '-------' are meant to delimit file content and <...> is meant to
be stuff you fill in.
>
> # Define the environment variables #
> environ.load()
> }
>
> The file All0.Classes (which will not be exported ... see exportPattern)
> contains
> all the class definitions (setClass functions)
>
> Finally, I have some other functions, such as db.plot, which contain the
> following statement
> (at the end of the file):
>
> setMethod("plot", signature(x="db"), function(x,y,...) db.plot(x,...))
>
> My questions:
> - Should the setMethods be regrouped in a single file (as I read from
> the net).
Doesn't matter from a functional perspective, might make sense as a
strategy to organize large amounts of code.
> - What are the differences between "R CMD check" and "R CMD INSTALL" as
> far as the steps are involved.
>
> As a matter of fact:
> - R CMD check finds that everything is OK
> - R CMD INSTALL gives me a set of warnings of the following type:
>
> Warning in matchSignature(signature, fdef, where) :
> in the method signature for function "[<-" no definition for class: "db"
> I did not use the Collate option (that Martin suggested) as I am not
> sure of its syntax and where I should add these statements.
in the DESCRIPTION file
Collate: FirstFile.R SecondFile.R ThirdFile.R
see 'Writing R Extensions' available from help.start()
>
> The package works fine anyhow but I would like to correct these warnings.
>
> By the way, as I belong to an institute where we use Fedora Core 8, I am
> stuck with R 2.8.0.
>
> An ultimate problem: I develop two packages P1 and P2 where P2 requires P1.
> So I used the same architecture for both with NAMESPACE and .onLoad
> functions (in the zzz.lib files).
>
> For P2, I mention that it depends upon P1 in the DESCRIPTION file. This
> information seems redundant with the NAMESPACE where I can add
> "import(P1)". Finally when, as a user, I load both by library() (first
> P1 then P2), I receive a message about function .onLoad being loaded twice.
>
> How can I avoid this.
your export pattern includes .onLoad; arrange for .onLoad not to be
exported (a convention is to not export functions that start with '.').
Martin
>
> As you can see, I encountered several problems when converting my S3
> into S4. I would appreciate if someone could give me a complete
> information and a godd reference.
>
> Thanks in advance.
>
>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
--
Martin Morgan
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109
Location: Arnold Building M1 B861
Phone: (206) 667-2793
More information about the R-devel
mailing list