解决空间对象的子集设置不起作用的原因
Troubleshooting why subsetting of spatial object does not work
我正在尝试在 R 中对 'SpatialPolygonsDataFrame' 进行子集化,但其他线程中提出的方法似乎不起作用。我正在使用 R 版本 3.3.2,我正在 mac 上通过 R studio 访问它。
不幸的是,我无法提供我的数据集,(因为我无法对我的数据进行子集化)。
这个,
sp2 <- sp1[sp1@data$compound_found == 1, ]
产生了以下错误:
Error in sp1[sp1@data$compound_found == 1, ] : cannot get a slot ("Polygons") from an object of type "NULL"
尽管
sp1@data$compound_found == 1
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE
[14] FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
FALSE FALSE TRUE TRUE
[27] TRUE TRUE FALSE TRUE TRUE FALSE TRUE
TRUE FALSE FALSE FALSE TRUE
sp2 <- sp1["compound_found" == 1, ]
不会创建错误,但会创建一个空对象
nrow(sp2@data) # returns 0
任何解释为什么我不能按照我尝试的方式进行子集化?我该怎么做呢?
编辑:
class(sp1)
returns
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
编辑以描述在 OP 的帮助下找到解决方案的故障排除。
A SpatialPolygonsDataFrame
通常可以像 OP 在原始问题中所做的那样进行子集化:
sp1[sp1@data$compound_found == 1, ]
在没有看到数据的情况下不确定错误来自何处。要进行故障排除,您可以检查 SpatialPolygonsDataFrame
的结构以查看错误可能来自何处。
str(sp1)
您还可以分别对 @data
和 @polygons
进行子集化,以检查它是否提取了正确的元素。
如果你想子集 sp1@data
你可以使用:
sp1@data[1:ncol(sp1@data)][sp1@data$compound_found == 1,]
得到sp1@polygons
:
sp1@polygons[sp1@data$compound_found == 1]
注意@data
和@polygons
的长度应该是一样的。参见 http://www.dpi.inpe.br/gilberto/tutorials/software/R-contrib/sp/html/SpatialPolygons.html
"data: the number of rows in data should equal the number of Polygons-class objects in Sr"
检查 nrow(sp1@data)
和 length(sp1@polygons)
是否相同。
我正在尝试在 R 中对 'SpatialPolygonsDataFrame' 进行子集化,但其他线程中提出的方法似乎不起作用。我正在使用 R 版本 3.3.2,我正在 mac 上通过 R studio 访问它。
不幸的是,我无法提供我的数据集,(因为我无法对我的数据进行子集化)。
这个,
sp2 <- sp1[sp1@data$compound_found == 1, ]
产生了以下错误:
Error in sp1[sp1@data$compound_found == 1, ] : cannot get a slot ("Polygons") from an object of type "NULL"
尽管
sp1@data$compound_found == 1
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE
[14] FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
FALSE FALSE TRUE TRUE
[27] TRUE TRUE FALSE TRUE TRUE FALSE TRUE
TRUE FALSE FALSE FALSE TRUE
sp2 <- sp1["compound_found" == 1, ]
不会创建错误,但会创建一个空对象
nrow(sp2@data) # returns 0
任何解释为什么我不能按照我尝试的方式进行子集化?我该怎么做呢?
编辑:
class(sp1)
returns
[1] "SpatialPolygonsDataFrame" attr(,"package") [1] "sp"
编辑以描述在 OP 的帮助下找到解决方案的故障排除。
A SpatialPolygonsDataFrame
通常可以像 OP 在原始问题中所做的那样进行子集化:
sp1[sp1@data$compound_found == 1, ]
在没有看到数据的情况下不确定错误来自何处。要进行故障排除,您可以检查 SpatialPolygonsDataFrame
的结构以查看错误可能来自何处。
str(sp1)
您还可以分别对 @data
和 @polygons
进行子集化,以检查它是否提取了正确的元素。
如果你想子集 sp1@data
你可以使用:
sp1@data[1:ncol(sp1@data)][sp1@data$compound_found == 1,]
得到sp1@polygons
:
sp1@polygons[sp1@data$compound_found == 1]
注意@data
和@polygons
的长度应该是一样的。参见 http://www.dpi.inpe.br/gilberto/tutorials/software/R-contrib/sp/html/SpatialPolygons.html
"data: the number of rows in data should equal the number of Polygons-class objects in Sr"
检查 nrow(sp1@data)
和 length(sp1@polygons)
是否相同。