R sf nesnesini SpatialPolygonsDataFrame dosyasına geri dönüştürür


27

Bir sf nesnesini SpatialPolygonsDataFrame'e nasıl dönüştürebilirim?

Ben R 3.4.0 ve versiyon 0.4.1 sf çalıştırıyorum. Sf dokümantasyon bir bahseder as_Spatialişlevi, ancak bu benim (nedense) yüklemek kullanılamaz.


Zorlama yöntemi 0,4-1 sf'de geçerlidir, işlevi çağırmaya çalıştığınızda ne olur?
Jeffrey Evans,

2
olarak (sf, "Spatial")
mdsumner

@Jeffrey Evans, Kazuhito'nun aşağıdaki cevabı problemi çoğaltır (ve kısmi bir çözüm sunar)
Simon

Yanıtlar:


38

kullandım

 as(nc, 'Spatial')

Edzer Pebesma tarafından vignette'in 2. bölümü olarak belirtildi (Sayfanın en altına gidin).


Onu gördüm. Ancak bunu daha yeni öğrendim ve bu soruyu görünce doğru bir cevaba sokma dürtüsünü hissettim;)
andschar

Ve kabul edilen cevabın gelecekteki okuyucular tarafından göz ardı edilmemesi önemlidir.
Kazuhito,

1
Bunun gerçekten bir SPDF gibi çalışması için, şöyle bir şey yapmam gerekiyordu: tmp <-as(nc, 'Spatial')O tmpid <- sapply(slot(tmp, "polygons"), function(x) slot(x, "ID"))zamanrow.names(tmp) <- tmpid
Simon

1
'gerçekten bir SPDF gibi çalışmak' ne anlama geliyor? Dönüşümün yarattığı dezavantajı göremiyorum.
andschar

8

sf:::as_Spatial()Geçici çözüm olarak kullanmak zorunda kaldım .

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)

Veri çerçevesini sağlam tutmanın bir yolu var mı?
Simon

as(sf, "Spatial")@Mdsumner tarafından çalıştırılan SpatialPolygonsDataFrame'i ürettiğini ve sizin gereksiniminize göre daha iyi olduğunu onaylıyorum. Sadece as_Spatial()sfc (yani geometri) alır gibi görünüyor .
Kazuhito,

1
Bu işlev bir yöntemdir ve () kullanarak çağrılmak istenir. Bir işlev nesnesi olarak dışa aktarılmaz, bu yüzden doğrudan çağırmak için ":::" gerekir.
Jeffrey Evans,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.