sfクラスからSpatial*****DataFrameクラスへの変換

Rにおけるジオメトリデータの操作は今後sfパッケージが主流になるらしい。 http://notchained.hatenablog.com/entry/2017/01/06/213333

開発が活発なためせっかく整備したコードが今後も使えるという保証はないため, 利用に少しためらいもあるが,最近少し使っている。

sfクラスからSpatial***DataFrameクラスに変換する際のメモである。

通常は以下のようにas(., "Spatial")で従来のSpatial****DataFrameに変換することができる。

    > nc <- st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)

    > > class(nc)
    [1] "sf"         "data.frame"

    > methods::as(nc, "Spatial") %>% class
    [1] "SpatialPolygonsDataFrame"
    attr(,"package")
    [1] "sp"

しかし,tbl_dfクラスも持つ場合にはエラーが生じてしまう。 その場合は以下のようにして,クラスをsf, data.frameにすると解決できる。

    nc %>%
    `class<-`(c("sf", "data.frame")) %>%
    methods::as(., "Spatial")