R преобразовать объект sf обратно в SpatialPolygonsDataFrame


27

Как преобразовать объект sf обратно в SpatialPolygonsDataFrame?

Я бегу R 3.4.0 и SF версии 0.4.1. В документации sf упоминается as_Spatialфункция, но она не доступна в моей установке (по некоторым причинам).


Метод принуждения доступен при sf 0.4-1, что происходит, когда вы пытаетесь вызвать функцию?
Джеффри Эванс

2
as (sf, "Spatial")
mdsumner

@Джеффри Эванс, ответ Казухито ниже повторяет проблему (и дает частичное решение)
Симон

Ответы:


38

я использовал

 as(nc, 'Spatial')

как указано в части 2 виньетки Эдзера Пебесмы (прокрутите страницу вниз).


видел это. Однако я понял это только недавно и почувствовал желание дать правильный ответ, увидев этот вопрос;)
andschar

И важно, что принятый ответ не будет пропущен будущими читателями.
Казухито,

1
Для этого по - настоящему работать , как SPDF, мне нужно было сделать что - то вроде: tmp <-as(nc, 'Spatial'), то tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))тогдаrow.names(tmp) <- tmpid
Simon

1
что означает «действительно работает как SPDF»? Я не вижу недостатка, созданного преобразованием.
andschar

8

Я должен был использовать в 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)

Есть ли способ сохранить целостность данных?
Саймон

Бег as(sf, "Spatial")по @mdsumner, я подтверждаю , что производит SpatialPolygonsDataFrame, что лучше для вашего требования. Кажется, as_Spatial()занимает только SFC (то есть геометрия).
Казухито,

1
Эта функция является методом и должна вызываться с использованием as (). Он не экспортируется как объект функции, поэтому, чтобы вызвать его напрямую, вам нужно ":::".
Джеффри Эванс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.