r-tmap / tmap

R package for thematic maps
https://r-tmap.github.io/tmap
GNU General Public License v3.0
856 stars 119 forks source link

`tmap_leaflet` creates empty Rplot.pdf when used in `targets` command #691

Closed johnbaums closed 1 year ago

johnbaums commented 1 year ago

When tmap_leaflet is called within a targets command, an empty (i.e., no pages, won't open) PDF file, Rplots.pdf, is created. Starting a PDF device is unexpected, and no such PDF file is created when running the same expression interactively.

_targets.R:

library(targets)
library(tmap)
library(magrittr)
library(htmlwidgets)

data(land)

list(
  tar_target(
    test, {
      tmap_leaflet(tm_shape(land) + tm_raster('cover_cls')) %>%
        htmlwidgets::saveWidget('test.html', selfcontained=TRUE)

      'test.html'
    },
    format='file'
  )
)
Session info ``` r sessioninfo::session_info() ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────────── setting value version R version 4.2.1 (2022-06-23) os macOS Ventura 13.0 system x86_64, darwin17.0 ui RStudio language (EN) collate en_US.UTF-8 ctype en_US.UTF-8 tz Australia/Melbourne date 2023-02-16 rstudio 2022.12.0+353 Elsbeth Geranium (desktop) pandoc 2.19.2 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/ (via rmarkdown) ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────────── package * version date (UTC) lib source abind 1.4-5 2016-07-21 [1] CRAN (R 4.2.0) assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.2.0) backports 1.4.1 2021-12-13 [1] CRAN (R 4.2.0) base64enc 0.1-3 2015-07-28 [1] CRAN (R 4.2.0) base64url 1.4 2018-05-14 [1] CRAN (R 4.2.0) callr 3.7.2 2022-08-22 [1] CRAN (R 4.2.0) class 7.3-20 2022-01-16 [1] CRAN (R 4.2.1) classInt 0.4-8 2022-09-29 [1] CRAN (R 4.2.0) cli 3.6.0 2023-01-09 [1] CRAN (R 4.2.1) clipr 0.8.0 2022-02-22 [1] CRAN (R 4.2.0) codetools 0.2-18 2020-11-04 [1] CRAN (R 4.2.1) colorspace 2.0-3 2022-02-21 [1] CRAN (R 4.2.0) crosstalk 1.2.0 2021-11-04 [1] CRAN (R 4.2.0) data.table 1.14.6 2022-11-16 [1] CRAN (R 4.2.0) DBI 1.1.3 2022-06-18 [1] CRAN (R 4.2.0) dichromat 2.0-0.1 2022-05-02 [1] CRAN (R 4.2.0) digest 0.6.31 2022-12-11 [1] CRAN (R 4.2.0) dplyr 1.0.10 2022-09-01 [1] CRAN (R 4.2.0) e1071 1.7-12 2022-10-24 [1] CRAN (R 4.2.0) ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.2.0) evaluate 0.19 2022-12-13 [1] CRAN (R 4.2.0) fansi 1.0.3 2022-03-24 [1] CRAN (R 4.2.0) farver 2.1.1 2022-07-06 [1] CRAN (R 4.2.0) fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.2.0) fs 1.5.2 2021-12-08 [1] CRAN (R 4.2.0) generics 0.1.3 2022-07-05 [1] CRAN (R 4.2.0) glue 1.6.2 2022-02-24 [1] CRAN (R 4.2.0) highr 0.10 2022-12-22 [1] CRAN (R 4.2.0) htmltools 0.5.4 2022-12-07 [1] CRAN (R 4.2.0) htmlwidgets * 1.6.1 2023-01-07 [1] CRAN (R 4.2.0) igraph 1.3.5 2022-09-22 [1] CRAN (R 4.2.0) jsonlite 1.8.4 2022-12-06 [1] CRAN (R 4.2.0) KernSmooth 2.23-20 2021-05-03 [1] CRAN (R 4.2.1) knitr 1.41 2022-11-18 [1] CRAN (R 4.2.0) lattice 0.20-45 2021-09-22 [1] CRAN (R 4.2.1) leafem 0.2.0 2022-04-16 [1] CRAN (R 4.2.0) leaflet 2.1.1 2022-03-23 [1] CRAN (R 4.2.0) leaflet.providers 1.9.0 2019-11-09 [1] CRAN (R 4.2.0) leafsync 0.1.0 2019-03-05 [1] CRAN (R 4.2.0) lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.2.0) lwgeom 0.2-10 2022-11-19 [1] CRAN (R 4.2.0) magrittr * 2.0.3 2022-03-30 [1] CRAN (R 4.2.0) munsell 0.5.0 2018-06-12 [1] CRAN (R 4.2.0) pillar 1.8.1 2022-08-19 [1] CRAN (R 4.2.0) pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.2.0) png 0.1-8 2022-11-29 [1] CRAN (R 4.2.0) processx 3.7.0 2022-07-07 [1] CRAN (R 4.2.0) proxy 0.4-27 2022-06-09 [1] CRAN (R 4.2.0) ps 1.7.1 2022-06-18 [1] CRAN (R 4.2.0) purrr 1.0.0 2022-12-20 [1] CRAN (R 4.2.0) R.cache 0.16.0 2022-07-21 [1] CRAN (R 4.2.0) R.methodsS3 1.8.2 2022-06-13 [1] CRAN (R 4.2.0) R.oo 1.25.0 2022-06-12 [1] CRAN (R 4.2.0) R.utils 2.12.2 2022-11-11 [1] CRAN (R 4.2.0) R6 2.5.1 2021-08-19 [1] CRAN (R 4.2.0) raster 3.6-13 2023-01-07 [1] CRAN (R 4.2.0) RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.2.0) Rcpp 1.0.9 2022-07-08 [1] CRAN (R 4.2.0) reprex 2.0.2 2022-08-17 [1] CRAN (R 4.2.0) rlang 1.0.6 2022-09-24 [1] CRAN (R 4.2.0) rmarkdown 2.19 2022-12-15 [1] CRAN (R 4.2.0) rstudioapi 0.14 2022-08-22 [1] CRAN (R 4.2.0) s2 1.1.1 2022-11-17 [1] CRAN (R 4.2.0) scales 1.2.1 2022-08-20 [1] CRAN (R 4.2.0) sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.2.0) sf 1.0-9 2022-11-08 [1] CRAN (R 4.2.0) sp 1.5-1 2022-11-07 [1] CRAN (R 4.2.0) stars 0.6-0 2022-11-21 [1] CRAN (R 4.2.1) styler 1.7.0 2022-03-13 [1] CRAN (R 4.2.0) targets * 0.14.2 2023-01-06 [1] CRAN (R 4.2.0) terra 1.6-51 2023-01-10 [1] Github (rspatial/terra@ad382cf) tibble 3.1.8 2022-07-22 [1] CRAN (R 4.2.0) tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.2.0) tmap * 3.3-3 2022-03-02 [1] CRAN (R 4.2.0) tmaptools 3.1-1 2021-01-19 [1] CRAN (R 4.2.0) units 0.8-1 2022-12-10 [1] CRAN (R 4.2.0) utf8 1.2.2 2021-07-24 [1] CRAN (R 4.2.0) vctrs 0.5.1 2022-11-16 [1] CRAN (R 4.2.0) viridisLite 0.4.1 2022-08-22 [1] CRAN (R 4.2.0) withr 2.5.0 2022-03-03 [1] CRAN (R 4.2.0) wk 0.7.1 2022-12-09 [1] CRAN (R 4.2.0) xfun 0.36 2022-12-21 [1] CRAN (R 4.2.0) XML 3.99-0.13 2022-12-04 [1] CRAN (R 4.2.0) yaml 2.3.6 2022-10-18 [1] CRAN (R 4.2.0) [1] /Library/Frameworks/R.framework/Versions/4.2/Resources/library ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ```
mtennekes commented 1 year ago

Sorry, I have no experience with targets. Please test it with mapview, because I expect similar issues (@tim-salabim)

johnbaums commented 1 year ago

Thanks for the suggestion. The pdf file is not created when using mapview.

To clarify my example above, the pdf file is generated prior to the saveWidget call - i.e., by the tmap_leaflet call. It's not generated if the object assigned to the target is just tm_shape(land) + tm_raster('cover_cls').

So the following _targets.R will also result in the pdf file being created:

library(targets)
library(tmap)
data(land)

list(
  tar_target(test, tmap_leaflet(tm_shape(land) + tm_raster('cover_cls')))
)

while this one does not:

library(targets)
library(tmap)
data(land)

list(
  tar_target(test, mapview::mapview(land, zcol='cover_cls'))
)

If you can't think of a reason for tmap_leaflet opening a pdf device, then maybe I need to raise this in the targets repo.