我有一个空间点数据框-> spatial_points
和一个多边形 - > spatial_poly
我可以使用多边形内的所有点进行子集化
subset_within <- spatial_points[spatial_poly,] which is nice and intuitive.
但是如果我想对多边形外的所有点进行子集化,我就不能使用
subset_ouside <- spatial_points[-spatial_poly,]
之前有人问过这个问题,答案是gDifference()
从rgeos
包中使用。美好的。
我的问题是,为什么 [ ] 适用于内部选择,而不是相反?我真的不明白错误信息
h(simpleError(msg, call)) 中的错误:在为函数“[”选择方法时评估参数“i”时出错:一元运算符的参数无效
只是好奇。谢谢。
编辑
这是从带有多边形的子集空间点借来的示例
require(rgeos)
require(sp)
##create spdf
coords=expand.grid(seq(150,151,0.1),seq(-31,-30,0.1))
spdf=data.frame("lng"=coords[,1],"lat"=coords[,2])
coordinates(spdf) = ~lng+lat
proj4string(spdf)<- CRS("+init=epsg:4326")
plot(spdf)
##create poly
poly1 = SpatialPolygons(list(Polygons(list(Polygon(cbind(c(150.45,150.45,150.75,150.75,150.45),c(-30.75,-30.45,-30.45,-30.75,-30.75)))),ID=1)))
proj4string(poly1)<- CRS("+init=epsg:4326")
##get points withing polygon
points_within <-spdf[poly1,] # this works
plot(spdf)
plot(poly1, add=T)
plot(points_within,col="blue",pch=16,add=T)
##get points outside polygon
points_outside <-spdf[-poly1,] # this does not work - why??
在这个简单的示例中,可以使用gDifference()
,它在此示例中有效。但是,我的 SpatialPointDataframe 非常大,使用 gDifference 会使 R 崩溃。