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).


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).


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)

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.