Performance of st_transform · Issue #1367 · r-spatial/sf (original) (raw)

More of a question than a bug, but it seems that transforming object geometries is slower in sf than its predecessor. I'm not sure if this is new but was surprised to find this as most benchmarks I've seen that compare sp code with sf code show substantial performance improvements of the more recent package.

I know performance isn't everything but I thought the factor of ~4 slowdown I'm seeing in what is I think equivalent code may be of interest.

library(sf) #> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 7.0.0 nc = st_read(system.file("shape/nc.shp", package="sf")) #> Reading layer nc' from data source /home/robin/R/x86_64-pc-linux-gnu-library/3.6/sf/shape/nc.shp' using driver ESRI Shapefile' #> Simple feature collection with 100 features and 14 fields #> geometry type: MULTIPOLYGON #> dimension: XY #> bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965 #> geographic CRS: NAD27 nc_sp = as(nc, "Spatial") bench::mark(st_transform(nc, 4326), sp::spTransform(nc_sp, sp::CRS("+init=epsg:4326")), check = FALSE) #> # A tibble: 2 x 6 #> expression min median itr/sec#> <bch:expr> <bch:t> <bch:> <dbl> #> 1 st_transform(nc, 4326) 100.5ms 102ms 9.80 #> 2 sp::spTransform(nc_sp, sp::CRS("+init=epsg:4326")) 23.2ms 24ms 41.4 #> # … with 2 more variables: mem_alloc <bch:byt>,gc/sec`

Created on 2020-04-14 by the reprex package (v0.3.0)

Session info

devtools::session_info() #> ─ Session info ─────────────────────────────────────────────────────────────── #> setting value
#> version R version 3.6.3 (2020-02-29) #> os Ubuntu 18.04.4 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language en_GB:en
#> collate en_GB.UTF-8
#> ctype en_GB.UTF-8
#> tz Europe/London
#> date 2020-04-14
#> #> ─ Packages ─────────────────────────────────────────────────────────────────── #> package * version date lib source
#> assertthat 0.2.1 2019-03-21 [2] CRAN (R 3.6.0)
#> backports 1.1.6 2020-04-05 [1] CRAN (R 3.6.3)
#> bench 1.1.1 2020-01-13 [2] CRAN (R 3.6.2)
#> callr 3.4.3 2020-03-28 [1] CRAN (R 3.6.3)
#> class 7.3-16 2020-03-25 [2] CRAN (R 3.6.3)
#> classInt 0.4-3 2020-04-06 [1] Github (r-spatial/classInt@d024051) #> cli 2.0.2 2020-02-28 [1] CRAN (R 3.6.2)
#> crayon 1.3.4 2017-09-16 [2] standard (@1.3.4)
#> DBI 1.1.0 2019-12-15 [2] CRAN (R 3.6.2)
#> desc 1.2.0 2018-05-01 [2] standard (@1.2.0)
#> devtools 2.3.0 2020-04-10 [1] CRAN (R 3.6.3)
#> digest 0.6.25 2020-02-23 [1] CRAN (R 3.6.2)
#> e1071 1.7-3 2019-11-26 [2] CRAN (R 3.6.1)
#> ellipsis 0.3.0 2019-09-20 [3] CRAN (R 3.6.1)
#> evaluate 0.14 2019-05-28 [2] CRAN (R 3.6.0)
#> fansi 0.4.1 2020-01-08 [1] CRAN (R 3.6.2)
#> fs 1.4.1 2020-04-04 [2] CRAN (R 3.6.3)
#> glue 1.4.0 2020-04-03 [2] CRAN (R 3.6.3)
#> highr 0.8 2019-03-20 [3] CRAN (R 3.5.3)
#> htmltools 0.4.0.9003 2020-04-09 [1] Github (rstudio/htmltools@1a7d0dc) #> KernSmooth 2.23-16 2019-10-15 [4] CRAN (R 3.6.1)
#> knitr 1.28 2020-02-06 [1] CRAN (R 3.6.2)
#> lattice 0.20-41 2020-04-02 [2] CRAN (R 3.6.3)
#> lifecycle 0.2.0.9000 2020-03-16 [1] Github (r-lib/lifecycle@355dcba)
#> magrittr 1.5 2014-11-22 [2] CRAN (R 3.5.2)
#> memoise 1.1.0 2017-04-21 [3] CRAN (R 3.5.0)
#> pillar 1.4.3 2019-12-20 [1] CRAN (R 3.6.2)
#> pkgbuild 1.0.6 2019-10-09 [2] CRAN (R 3.6.1)
#> pkgconfig 2.0.3 2019-09-22 [2] CRAN (R 3.6.1)
#> pkgload 1.0.2 2018-10-29 [3] CRAN (R 3.5.1)
#> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 3.6.2)
#> processx 3.4.2 2020-02-09 [1] CRAN (R 3.6.3)
#> profmem 0.5.0 2018-01-30 [2] CRAN (R 3.5.2)
#> ps 1.3.2 2020-02-13 [1] CRAN (R 3.6.3)
#> R6 2.4.1 2019-11-12 [2] CRAN (R 3.6.1)
#> Rcpp 1.0.4.6 2020-04-09 [1] CRAN (R 3.6.3)
#> remotes 2.1.1 2020-02-15 [1] CRAN (R 3.6.2)
#> rgdal 1.4-8 2019-11-27 [1] CRAN (R 3.6.3)
#> rlang 0.4.5.9000 2020-03-25 [1] Github (r-lib/rlang@a90b04b)
#> rmarkdown 2.1.2 2020-04-09 [1] Github (rstudio/rmarkdown@65dd144) #> rprojroot 1.3-2 2018-01-03 [2] CRAN (R 3.5.3)
#> sessioninfo 1.1.1 2018-11-05 [3] CRAN (R 3.5.1)
#> sf * 0.9-2 2020-04-09 [1] Github (r-spatial/sf@0b09452)
#> sp 1.4-1 2020-02-28 [1] CRAN (R 3.6.2)
#> stringi 1.4.6 2020-02-17 [1] CRAN (R 3.6.2)
#> stringr 1.4.0 2019-02-10 [2] standard (@1.4.0)
#> testthat 2.3.2 2020-03-02 [1] CRAN (R 3.6.3)
#> tibble 3.0.0 2020-03-30 [1] CRAN (R 3.6.3)
#> units 0.6-6 2020-03-16 [1] CRAN (R 3.6.3)
#> usethis 1.6.0 2020-04-09 [1] CRAN (R 3.6.3)
#> utf8 1.1.4 2018-05-24 [2] CRAN (R 3.5.3)
#> vctrs 0.2.99.9011 2020-04-14 [1] Github (r-lib/vctrs@1fcc3fb)
#> withr 2.1.2 2018-03-15 [2] CRAN (R 3.5.3)
#> xfun 0.13 2020-04-13 [1] CRAN (R 3.6.3)
#> yaml 2.2.1 2020-02-01 [1] CRAN (R 3.6.2)
#> #> [1] /home/robin/R/x86_64-pc-linux-gnu-library/3.6 #> [2] /usr/local/lib/R/site-library #> [3] /usr/lib/R/site-library #> [4] /usr/lib/R/library