R convierte el objeto sf de nuevo a SpatialPolygonsDataFrame

27

¿Cómo convierto un objeto sf de nuevo a un SpatialPolygonsDataFrame?

Estoy ejecutando R 3.4.0 y sf versión 0.4.1. La documentación de SF menciona una as_Spatialfunción, pero esta no está disponible en mi instalación (por alguna razón).

Simon
fuente
El método de coerción está disponible en sf 0.4-1, ¿qué sucede cuando intenta llamar a la función?
Jeffrey Evans
2
as (sf, "Spatial")
mdsumner
@Jeffrey Evans, la respuesta de Kazuhito a continuación replica el problema (y proporciona una solución parcial)
Simon

Respuestas:

38

solía

 as(nc, 'Spatial')

como indicó la parte 2 de la viñeta de Edzer Pebesma (Desplácese hasta el final de la página).

andschar
fuente
Lo ví. Sin embargo, descubrí esto recientemente y sentí la necesidad de darle una respuesta adecuada al ver esta pregunta;)
andschar
Y es importante que los futuros lectores no pasen por alto la respuesta aceptada.
Kazuhito
1
Para que esto funcione realmente como una SPDF, que tenía que hacer algo como: tmp <-as(nc, 'Spatial'), a continuación, tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))a continuación,row.names(tmp) <- tmpid
Simon
1
¿Qué significa "realmente funciona como un SPDF"? No veo ninguna desventaja creada por la conversión.
andschar
8

Tuve que usar sf:::as_Spatial()como solución alternativa.

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)
Kazuhito
fuente
¿Hay alguna manera de mantener intacto el marco de datos?
Simon
Correr as(sf, "Spatial")por @mdsumner, confirmo que produce SpatialPolygonsDataFrame, que es mejor para sus necesidades. Parece que solo as_Spatial()necesita sfc (es decir, geometría).
Kazuhito
1
Esta función es un método y se llamará utilizando as (). No se exporta como un objeto de función, por eso, para llamarlo directamente, necesita ":::".
Jeffrey Evans