[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