Marie Pierre Sylvestre
2008-Sep-09 20:33 UTC
[R] building a package that contains S4 classes and methods
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.
MP
Peter Dalgaard
2008-Sep-10 05:07 UTC
[R] building a package that contains S4 classes and methods
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