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@list,MoreArgs=list(...),simplify=FALSE)
    x@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@list,MoreArgs=list(...),simplify=FALSE)
        x@list=newlist
        return(x)
}

setMethod("as.yearmon",
     signature(x = "SpatialPointsDataFrameListZoo"),
        as.yearmon.SpatialPointsDataFrameListZoo
)

--j

2011/8/24 Uwe Ligges<lig...@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@list,MoreArgs=list(...),simplify=FALSE)
        x@list=newlist
        return(x)
}

Thoughts?

--j






______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to