[R-sig-Geo] extending sp classes
Roger Bivand
Roger.Bivand at nhh.no
Fri Oct 6 21:09:36 CEST 2006
On Fri, 6 Oct 2006, Katarzyna Adamczyk wrote:
> Dear members of r-sig-geo,
>
> I discovered "sp" library and I found
> it very usefull for switching
> between different classes of R spatial
> libraries.
>
> I defined my own class, extending
> SpatialPolygonsDataFrame.
> When I try to apply "spplot" function to
> the extended class, it doesn't work :
> I have a coercion problem error message,
> but I don't know what it means.
>
> I proceeded as follows:
>
> I considered SpatialPolygonsDataFrame help example :
>
> grd <- GridTopology(c(1,1), c(1,1), c(10,10))
> polys <- as.SpatialPolygons.GridTopology(grd)
> centroids <- getSpPPolygonsLabptSlots(polys)
> x <- centroids[,1]
> y <- centroids[,2]
> z <- 1.4 + 0.1*x + 0.2*y + 0.002*x*x
> ex_1.7 <- SpatialPolygonsDataFrame(polys, data=data.frame(x=x, y=y, z=z, row.names=getSpPPolygonsIDSlots(polys)))
> spplot(ex_1.7)
>
>
> I defined my own class :
>
> > setClass("myclass",contains="SpatialPolygonsDataFrame")
> [1] "myclass"
> > ex<-ex_1.7
> > class(ex) = "myclass"
> > is(ex)
> [1] "myclass" "SpatialPolygonsDataFrame"
> [3] "SpatialPolygons" "Spatial"
> > spplot(ex)
> Erreur dans as.data.frame.default(obj) : cannot coerce class "myclass"
> into a data.frame
>
> Did anyone of you encounter a similar problem and can help me?
Well, writing new-style classes is quite advanced. If you are not on
Windows, please download the source package, and try editing line 158 of
R/spplot.R from:
sdf = as.data.frame(obj)
to
sdf = as(obj, "data.frame")
to see if that way of doing method dispatch works:
> t1 <- as.data.frame(ex)
Error in as.data.frame.default(ex) : cannot coerce class "myclass" into a data.frame
> t2 <- as(ex, "data.frame")
> class(t2)
[1] "data.frame"
suggests that it might. I guess that "myclass" actually is richer, please
let us know how you get on.
If you are on Windows, you will need to write a small wrapper function
like:
> as.data.frame.myclass <- function(obj) obj at data
> t1 <- as.data.frame(ex)
> class(t1)
[1] "data.frame"
This doesn't yet work, but you get the idea - provide an old-style method
to match the one that cannot be found.
Roger
>
> Thank you in advance.
>
> Katarzyna
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no
More information about the R-sig-Geo
mailing list