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
источник
видел это. Однако я понял это только недавно и почувствовал желание дать правильный ответ, увидев этот вопрос;)
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 (). Он не экспортируется как объект функции, поэтому, чтобы вызвать его напрямую, вам нужно ":::".
Джеффри Эванс