我正在寻找通过属性子集SpatialPolygonsDataFrame的子集,但我想允许它返回一个空的SpatialPolygonsDataFrame。
如果我们将SpatialPolygonsDataFrame类型的对象像data.frames一样对待,如here所述,我们应该能够获取并使用空对象。
我很感兴趣,因为我希望将其合并到一个函数中,该函数可能会尝试通过本质上不选择任何功能的属性进行子集化。
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对象?我想要对此类对象执行的未来操作涉及在现有地图上进行绘图,因此我希望无论如何都可以生成图像,即使是空白图像也是如此。
最佳答案
现在你不能。这有点不一致,因为对于SpatialPointsDataFrame
对象,您可以:
library(sp)
demo(meuse, ask = FALSE)
x = meuse[F,]
尽管有警告;另外,
validObject(x)
返回FALSE
,因此不允许使用它们!这样的对象应该代表什么有点抽象,但是我可以看到与零行的
data.frame
对象的类比:它们可以存在很有用。