[R] setMethods/setGeneric problem when R CMD CHECK'ing a package

Uwe Ligges ligges at statistik.tu-dortmund.de
Wed Aug 24 11:58:18 CEST 2011



On 24.08.2011 11:09, Jonathan Greenberg wrote:
> Hmm, so I moved the function call to the same file as the methods
> call, and placed it above the method in the file -- but I'm getting
> the same error.  Is there something "odd" about as.yearmon in the zoo
> package that it might not be getting defined as a generic function?
> If so, how would I go about creating a generic?
> setGeneric("as.yearmon") doesn't seem to cut it.

I haven't looked at the details but just commented on the obvious 
glitches in your code. Now that I tested with R-2.13.1 patched, zoo 
1.7-4, sp 0.9-84, it just works for me:


setClass("SpatialPointsDataFrameList",representation(list="list"),contains=c("SpatialPointsDataFrame"))
setClass("SpatialPointsDataFrameListZoo",contains=c("SpatialPointsDataFrameList"))
#setGeneric("as.yearmon")
as.yearmon.SpatialPointsDataFrameListZoo=function(x,...)
{
newlist=mapply(zoo:::as.yearmon,x at list,MoreArgs=list(...),simplify=FALSE)
     x at list=newlist
     return(x)
}
setMethod("as.yearmon",
     signature(x = "SpatialPointsDataFrameListZoo"),
     as.yearmon.SpatialPointsDataFrameListZoo
)
works for me (at least, it is installable and passes checks, if I add

Depends: methods, sp, zoo

into the DESCRIPTION file (hence without using a NAMESPACE yet).


Uwe Ligges







>
> Here's the new file contents:
>
> as.yearmon.SpatialPointsDataFrameListZoo=function(x,...)
> {
> 	newlist=mapply(zoo:::as.yearmon,x at list,MoreArgs=list(...),simplify=FALSE)
> 	x at list=newlist
> 	return(x)
> }
>
> setMethod("as.yearmon",
>      signature(x = "SpatialPointsDataFrameListZoo"),
> 	as.yearmon.SpatialPointsDataFrameListZoo
> )
>
> --j
>
> 2011/8/24 Uwe Ligges<ligges at statistik.tu-dortmund.de>:
>>
>>
>> On 24.08.2011 10:30, Jonathan Greenberg wrote:
>>>
>>> R-helpers:
>>>
>>> I'm trying to build a package, but I'm a bit new to the whole S3/S4
>>> methods concept.  I'm trying to add a new definition of the zoo
>>> function "as.yearmon", but I'm getting the following error when it
>>> gets to this point during a package install:
>>
>> Thhis seesm more appropiate for the R-devel rather than the R-help list.
>> Anyway, see below.
>>
>>
>>> ***
>>>
>>> R CMD INSTALL STARStools
>>> * installing to library
>>> ‘/Library/Frameworks/R.framework/Versions/2.13/Resources/library’
>>> WARNING: omitting pointless dependence on 'R' without a version
>>> requirement
>>> * installing *source* package ‘STARStools’ ...
>>> ** R
>>> ** inst
>>> ** preparing package for lazy loading
>>> Loading required package: sp
>>> raster version 1.9-5 (28-July-2011)
>>> Geospatial Data Abstraction Library extensions to R successfully loaded
>>> Loaded GDAL runtime: GDAL 1.8.0, released 2011/01/12
>>> Path to GDAL shared files:
>>> /Library/Frameworks/GDAL.framework/Versions/1.8/Resources/gdal
>>> Loaded PROJ.4 runtime: Rel. 4.7.1, 23 September 2009
>>> Path to PROJ.4 shared files: (autodetected)
>>>
>>> Attaching package: 'zoo'
>>>
>>> The following object(s) are masked from 'package:base':
>>>
>>>      as.Date
>>>
>>> Creating a new generic function for "as.Date" in "STARStools"
>>> Creating a new generic function for "as.list" in "STARStools"
>>> Error in setGeneric(f, where = where) :
>>>    must supply a function skeleton, explicitly or via an existing function
>>> Error : unable to load R code in package 'STARStools'
>>> ERROR: lazy loading failed for package ‘STARStools’
>>> * removing
>>> ‘/Library/Frameworks/R.framework/Versions/2.13/Resources/library/STARStools’
>>> * restoring previous
>>>
>>> ‘/Library/Frameworks/R.framework/Versions/2.13/Resources/library/STARStools’
>>>
>>> ***
>>>
>>> # Note that these "require" statements do not appear in the code, but
>>> appear in the DESCRIPTION file:
>>> require("sp")
>>> require("zoo")
>>
>> ??? Not valid in the DESCRIPTION file. Either use this in  your code or
>> import from the corresponding Namespaces which you will have to do anyway
>> for the next R release.
>>
>>
>>
>>> # Here are the class definitions (filename AAAclassdefinitions.R):
>>>
>>> setClass("SpatialPointsDataFrameList",representation(list="list"),contains=c("SpatialPointsDataFrame"))
>>>
>>> setClass("SpatialPointsDataFrameListZoo",contains=c("SpatialPointsDataFrameList"))
>>>
>>> # And here is where it is getting hung up. filename
>>> "as.yearmon.SpatialPointsDataFrameListZoo_SpatialPointsDataFrameListZoo.R"
>>>
>>> setMethod("as.yearmon",
>>>      signature(x = "SpatialPointsDataFrameListZoo"),
>>>         as.yearmon.SpatialPointsDataFrameListZoo
>>> )
>>
>> You try to register the method pointing to a function definition that does
>> not exist at this point (since you define it below). Just move the
>> definition up.
>>
>> Uwe Ligges
>>
>>
>>>
>>> # Filename "as.yearmon.SpatialPointsDataFrameListZoo.R"
>>> as.yearmon.SpatialPointsDataFrameListZoo=function(x,...)
>>> {
>>>
>>>   newlist=mapply(zoo:::as.yearmon,x at list,MoreArgs=list(...),simplify=FALSE)
>>>         x at list=newlist
>>>         return(x)
>>> }
>>>
>>> Thoughts?
>>>
>>> --j
>>>
>>
>
>
>



More information about the R-help mailing list