通过子集获取空的SpatialPolygonsDataFrame?

时间:2015-02-15 15:25:31

标签: r spatial maptools sp

我希望通过属性对SpatialPolygonsDataFrame进行子集化,但我想允许它返回一个空的SpatialPolygonsDataFrame。

如果我们要像对象here那样处理类似于Spatial.frames的SpatialPolygonsData类型的对象,我们应该能够获得并处理空对象。

我很感兴趣,因为我希望将其合并到一个函数中,该函数可能尝试通过一个基本上不会选择任何特征的属性进行子集化。

owd <- getwd() 
setwd(system.file("shapes", package = "maptools")) 
library(maptools) 
nc90 <- readShapeSpatial("co37_d90") 
setwd(owd)

nc90@data[nc90@data$AREA>0.15,]               # returns data.frame
bigctys <- nc90[nc90@data$AREA>0.15,]         # SpatialPolygonsDataFrame 
nc90@data[nc90@data$AREA>0.25,]               # returns empty data.frame
bigestctys <- nc90[nc90@data$AREA>0.25,]      # ERROR

有没有办法让这项工作?如果没有,有没有办法初始化空的SpatialPolygonsDataFrame对象?我想要对这样一个对象执行的未来操作涉及在现有地图上进行绘图,所以即使空白,我仍然希望生成图像。

1 个答案:

答案 0 :(得分:4)

现在你不能。这有点不一致,对于SpatialPointsDataFrame对象,你可以:

library(sp)
demo(meuse, ask = FALSE)
x = meuse[F,]

虽然有警告;另外,validObject(x)会返回FALSE,因此不允许使用它们!

这些对象应该代表什么有点抽象,但我可以看到与data.frame对象零行的类比:它们可以存在是有用的。