R แปลงวัตถุ sf กลับไปเป็น SpatialPolygonsDataFrame


27

ฉันจะแปลงวัตถุ sf กลับไปเป็น SpatialPolygonsDataFrame ได้อย่างไร

ฉันใช้ R 3.4.0 และ sf เวอร์ชั่น 0.4.1 เอกสารเอสเอฟระบุว่าas_Spatialฟังก์ชั่น แต่ตอนนี้ไม่สามารถใช้ได้ในการติดตั้งของฉัน (ด้วยเหตุผลบางอย่าง)


วิธีการ coersion สามารถใช้ได้ที่ sf 0.4-1, hapens อะไรเมื่อคุณพยายามเรียกใช้ฟังก์ชัน?
Jeffrey Evans

2
ในฐานะ (sf, "Spatial")
mdsumner

@Jeffrey อีแวนส์, คำตอบ Kazuhito ด้านล่างซ้ำปัญหา (และให้ solition บางส่วน)
ไซมอน

คำตอบ:


38

ฉันใช้

 as(nc, 'Spatial')

เป็นส่วนที่ 2 ของบทความโดย Edzer Pebesma ระบุไว้ (เลื่อนไปที่ด้านล่างของหน้า)


เห็นมัน อย่างไรก็ตามฉันเพิ่งค้นพบสิ่งนี้เมื่อไม่นานมานี้และฉันก็รู้สึกอยากที่จะใส่มันเข้าไปในคำตอบที่เหมาะสมเมื่อเห็นคำถามนี้)
andschar

และเป็นสิ่งสำคัญคำตอบที่ยอมรับจะไม่ถูกมองข้ามโดยผู้อ่านในอนาคต
Kazuhito

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)

มีวิธีเก็บดาต้าเฟรมไว้เหมือนเดิมหรือไม่?
Simon

ดำเนินการas(sf, "Spatial")โดย @mdsumner ฉันยืนยันว่าได้สร้าง SpatialPolygonsDataFrame ซึ่งดีกว่าสำหรับความต้องการของคุณ ดูเหมือนว่าas_Spatial()จะใช้ sfc (เช่นเรขาคณิต) เท่านั้น
Kazuhito

1
ฟังก์ชั่นนี้เป็นวิธีการหนึ่งและใช้สำหรับการโทรเป็น () มันไม่ได้ถูกส่งออกเป็นวัตถุฟังก์ชั่นซึ่งเป็นสาเหตุที่จะเรียกมันโดยตรงคุณต้อง ":::"
Jeffrey Evans
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.