[R] building a package that contains S4 classes and methods

Peter Dalgaard p.dalgaard at biostat.ku.dk
Wed Sep 10 07:07:26 CEST 2008


Marie Pierre Sylvestre wrote:
> Hello R users,
>
> I am trying to make a my first package and I get an error that I can
> understand. The package is build out of three files (one for functions, 1
> for s4 classes and 1 for s4 methods).
>
> Once I source them I run 
>
> package.skeleton( name="TDC" )
>
> within a R session and I get 
>
> Creating directories ...
> Creating DESCRIPTION ...
> Creating Read-and-delete-me ...
> Saving functions and data ...
> Making help files ...
> Done.
> Further steps are described in './TDC/Read-and-delete-me'.
> Warning messages:
> 1: In dump(internalObjs, file = file.path(code_dir,
> sprintf("%s-internal.R",  :
>   deparse of an S4 object will not be source()able
> 2: In dump(internalObjs, file = file.path(code_dir,
> sprintf("%s-internal.R",  :
>   deparse of an S4 object will not be source()able
> 3: In dump(internalObjs, file = file.path(code_dir,
> sprintf("%s-internal.R",  :
>   deparse of an S4 object will not be source()able
> 4: In dump(internalObjs, file = file.path(code_dir,
> sprintf("%s-internal.R",  :
>   deparse may be incomplete
>
>
> I keep going in spite of the warnings with 
> R CMD check --no-examples TDC
>
> and I get 
> * checking for working pdflatex ... OK
> * using log directory
> '/home/mariepierre/Packages/PermAlgo/PermAlgo/PermAlgo2/TDC.Rcheck'
> * using R version 2.7.1 (2008-06-23)
> * using session charset: UTF-8
> * checking for file 'TDC/DESCRIPTION' ... OK
> * checking extension type ... Package
> * this is package 'TDC' version '1.0'
> * checking package dependencies ... OK
> * checking if this is a source package ... OK
> * checking whether package 'TDC' can be installed ... ERROR
> Installation failed.
>
> The error file says:
>  
> * Installing *source* package 'TDC' ...
> ** R
> ** preparing package for lazy loading
> Error in parse(n = -1, file = file) : unexpected '<' at
> 102: `.__C__BindArgs` <-
> 103: <
> Calls: <Anonymous> -> code2LazyLoadDB -> sys.source -> parse
> Execution halted
> ERROR: lazy loading failed for package 'TDC'
> ** Removing
> '/home/mariepierre/Packages/PermAlgo/PermAlgo/PermAlgo2/TDC.Rcheck/TDC'
>
> The problem is with my classes and methods. The respective files contain:
>
> setClass("BindArgs",  signature( "function" ))
> setClass("BindArgs2", signature( "function" )) 
>
> and
>
> setMethod("initialize", "BindArgs", function( .Object, f, ... )
>       callNextMethod( .Object, function( x ) f( x, ... ) )) 
>
> setMethod("initialize", "BindArgs2", function( .Object, f, ...)
>       callNextMethod( .Object, function( x, y ) f( x, y, ... ) )) 
>
> Everything works well within a R session but I can build the package.
>
> If I look at the internal R file that this created I get
>
> `.__C__BindArgs` <-
> <S4 object of class structure("classRepresentation", package = "methods")>
> `.__C__BindArgs2` <-
> <S4 object of class structure("classRepresentation", package = "methods")>
> `.__M__initialize:methods` <-
> <S4 object of class structure("MethodsList", package = "methods")>
> `.__T__initialize:methods` <-
> <environment>
>
> Well, let just say that I am new to classes so this confuses me greatly. I
> have checked the documentation and tried a few things but I reached my
> personal limits!
>
> I am using R 2.7.1 on Linux Fedora 8.
>
> Any comments on what is happening and/or help would be greatly appreciated.
>
>   
The main point is that you should not rely on R putting sensible code in 
the package source files, but rather stay in control yourself. What the 
warnings are telling you is that you cannot deparse an S4 object in a 
way that can be reparsed, so dump() doesn't work. What you get is

obj <-  <S4 object......>

and the syntax error from source() if you try using it. So what you need 
to is to delete it and put in the appropriate class/methods definitions 
from your original sources. It might help to look at an existing 
S4-using package.

-- 
   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907



More information about the R-help mailing list