如何将sf对象转换回SpatialPolygonsDataFrame?

我正在运行R 3.4.0和SF版本0.4.1。 sf文档中提到了as_Spatial函数,但是由于某些原因在我的安装中不可用。

评论

强制性方法在0.4-1可用,在尝试调用该函数时会发生什么?

as(sf,“空间”)

Kazuhito的@Jeffrey Evans,下面的答案重复了该问题(并提供了部分解决方案)

#1 楼

我使用了

 as(nc, 'Spatial')


作为Edzer Pebesma指出的小插图的第2部分(滚动到页面底部)。

评论


看到了。但是我只是在最近才发现这个问题,当我看到这个问题时,我感到有将其放入一个正确答案的渴望;)

– andschar
17年5月5日在7:46

而且重要的是,将来的读者也不会忽略已接受的答案。

– Kazuhito
17年5月6日在2:05

为了使它真正像SPDF一样工作,我需要执行以下操作:tmp <-as(nc,'Spatial'),然后tmpid <-sapply(slot(tmp,“ polygons”),function(x)slot(x ,“ ID”)),然后row.names(tmp)<-tmpid

–西蒙
17年5月15日在11:50



“像SPDF一样真正工作”是什么意思?我看不到转换带来的不利影响。

– andschar
17年5月15日在14:16

#2 楼

我必须使用sf:::as_Spatial()作为解决方法。

library(sf)
nc <- st_read(system.file("shape/nc.shp", package="sf"))

# sf -> sp
nc_sp <- as_Spatial(nc$geom)      # Error: could not find function "as_Spatial"

nc_sp <- sf:::as_Spatial(nc$geom) # This works

library(sp)
plot(nc_sp)


评论


有没有办法使数据框保持完整?

–西蒙
17年5月4日在8:03

通过@mdsumner作为(sf,“ Spatial”)运行,我确认它会产生SpatialPolygonsDataFrame,这更适合您的要求。似乎as_Spatial()仅采用sfc(即几何)。

– Kazuhito
17年5月4日在8:08



该函数是一个方法,可以使用as()进行调用。它没有导出为功能对象,这就是为什么要直接调用它,您需要“ :::”。

–杰弗里·埃文斯(Jeffrey Evans)
17年5月4日在17:29