sf::read_sf()とrgdal::readOGR()とtmaptools::read_shp()の速度比較

Rでシェープファイルデータを読込むための関数でどれが一番速度が速いか比較する。

library(sf)
library(tmaptools)
library(rgdal)
library(microbenchmark)
rfile <- system.file("shape/nc.shp", package="sf")

microbenchmark(sf::read_sf(rfile), 
               sf::st_read(rfile, quiet=T),
               rgdal::readOGR(rfile, verbose=F),
               tmaptools::read_shape(rfile),
               times=10)
Unit: milliseconds
                               expr        min         lq      mean
                 sf::read_sf(rfile)   8.671537   8.976245  14.69445
      sf::st_read(rfile, quiet = T)   6.392833   6.685836  15.94281
 rgdal::readOGR(rfile, verbose = F) 567.662413 597.656352 691.19212
       tmaptools::read_shape(rfile) 583.133058 596.592328 654.66730
     median         uq        max neval cld
  10.928342  14.948451   36.55517    10  a 
   6.852349   7.603736   54.89468    10  a 
 623.355303 678.476535 1090.38659    10   b
 626.761277 651.405453  836.15833    10   b

ということでsfパッケージ一択でした。

microbenchmark(read_sf(rfile),
               st_read(rfile, quiet=T, stringsAsFactors = F),
               times=20)
Unit: milliseconds
                                            expr      min       lq
                                  read_sf(rfile) 8.032669 8.185589
 st_read(rfile, quiet = T, stringsAsFactors = F) 5.793233 5.904619
     mean   median       uq       max neval cld
 8.703159 8.319064 9.221673 11.538136    20   b
 6.202890 6.021859 6.422662  8.131218    20  a 

毎回引数指定めんどくさいかもしれないが、大規模なデータを読み込む場合はst_read()がよいみたい。

もっと早く読み込める関数があったら教えてください。

ついでにggplot()とtmap()の速度について比較してみる。

library(ggplot2)
library(tmap)
nc <- st_read(rfile, quiet=T, stringsAsFactors = F)

microbenchmark(ggplot(nc)+geom_sf(aes(fill=CNTY_)), 
               tm_shape(nc)+tm_polygons(col="CNTY_"))
Unit: microseconds
                                      expr      min        lq      mean
   ggplot(nc) + geom_sf(aes(fill = CNTY_)) 2419.920 2465.9850 2947.4016
 tm_shape(nc) + tm_polygons(col = "CNTY_")  114.408  128.1895  214.9879
   median       uq       max neval cld
 2528.097 2605.502 24483.139   100   b
  157.263  175.387  6131.546   100  a 

ggplot2は使い慣れているから便利だけど、やはり描画速度に難があるみたい。 特に空間情報データの作図の際にはその傾向が強いと思う。