[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