在 shinyapps.io 上托管 flexdashboard 时显示地图时出错

Error in displaying maps when hosting flexdashboard on shinyapps.io

我创建了一个带有交互式发光组件的 flexdashboard,包括一张地图。

---
title: "Coronavirus Dashboard"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: scroll
    theme: readable
runtime: shiny
---

```{r setup, include=FALSE, echo=FALSE, warning=FALSE}
library(flexdashboard)
library(leaflet)
library(rgdal)
library(readr)
library(dplyr)
library(sf)
library(ggplot2)
library(tmap)

该地图显示来自在线 .csv 的数据,并使用来自 .zip 文件的形状文件创建,该文件下载并存储在本地名为 data:

的目录中
renderLeaflet({
covid_cases <- read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv")

# .zip downloaded from: https://www.naturalearthdata.com/downloads/50m-cultural-vectors/50m-admin-0-countries-2/
countries <- st_read("data/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shp", stringsAsFactors=FALSE, quiet=TRUE)

在对数据进行一些处理以创建结合 covid_casescountries 数据框的单个数据框之后,应用程序绘制了每个国家/地区的案例:

map <- tm_shape(map_and_cases) + tm_polygons("Percent of Population", id="country_name")
tmap_leaflet(map)
})

每当我 运行 文档时,这在 RStudio 中运行得非常好。但是,每当我尝试在 shinyapps.io 上托管仪表板时,我都会遇到以下错误消息:

"Error: An error has occurred. Check your logs or contact the app author for clarification."

检查我的日志:

2020-03-24T14:41:08.709221+00:00 shinyapps[1985429]: List of 3
2020-03-24T14:41:08.709701+00:00 shinyapps[1985429]:  $ echo   : logi FALSE
2020-03-24T14:41:08.862558+00:00 shinyapps[1985429]: 
  |                                                                       
  |.........................................                        |  64%
2020-03-24T14:41:08.710474+00:00 shinyapps[1985429]:  $ message: logi FALSE
2020-03-24T14:41:08.710489+00:00 shinyapps[1985429]: 
2020-03-24T14:41:08.862596+00:00 shinyapps[1985429]:   ordinary text without R code
2020-03-24T14:41:08.862597+00:00 shinyapps[1985429]: 
2020-03-24T14:41:08.862698+00:00 shinyapps[1985429]: 
  |                                                                       
  |...............................................                  |  73%
2020-03-24T14:41:08.863090+00:00 shinyapps[1985429]: label: unnamed-chunk-3
2020-03-24T14:41:08.876049+00:00 shinyapps[1985429]: 
  |                                                                       
  |.....................................................            |  82%
2020-03-24T14:41:08.876064+00:00 shinyapps[1985429]:   ordinary text without R code
2020-03-24T14:41:08.876064+00:00 shinyapps[1985429]: 
2020-03-24T14:41:08.876168+00:00 shinyapps[1985429]: 
  |                                                                       
  |...........................................................      |  91%
2020-03-24T14:41:08.876547+00:00 shinyapps[1985429]: label: unnamed-chunk-4
2020-03-24T14:41:08.888545+00:00 shinyapps[1985429]:   ordinary text without R code
2020-03-24T14:41:08.889867+00:00 shinyapps[1985429]: output file: /tmp/RtmpJQ4ULR/covid_dashboard.knit.md
2020-03-24T14:41:08.889868+00:00 shinyapps[1985429]: 
2020-03-24T14:41:08.888693+00:00 shinyapps[1985429]: 
2020-03-24T14:41:08.899598+00:00 shinyapps[1985429]: /opt/connect/ext/pandoc2/pandoc +RTS -K512m -RTS /tmp/RtmpJQ4ULR/covid_dashboard.utf8.md --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output /tmp/RtmpJQ4ULR/file1a850267e7e.html --email-obfuscation none --standalone --section-divs --template /opt/R/3.6.1/lib/R/library/flexdashboard/rmarkdown/templates/flex_dashboard/resources/default.html --id-prefix section- --variable 'theme:readable' --mathjax --variable 'mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML' --lua-filter /opt/R/3.6.1/lib/R/library/rmarkdown/rmd/lua/pagebreak.lua --lua-filter /opt/R/3.6.1/lib/R/library/rmarkdown/rmd/lua/latex-div.lua --include-in-header /tmp/RtmpJQ4ULR/file1a873f90aahtml --highlight-style pygments --include-before-body /tmp/RtmpJQ4ULR/file1a831797393.html --include-after-body /tmp/RtmpJQ4ULR/file1a857f3714c.html 
2020-03-24T14:41:09.009122+00:00 shinyapps[1985429]: 
2020-03-24T14:41:09.009124+00:00 shinyapps[1985429]: Output created: /tmp/RtmpJQ4ULR/file1a850267e7e.html
2020-03-24T14:41:08.888512+00:00 shinyapps[1985429]: 
  |                                                                       
  |.................................................................| 100%
2020-03-24T14:41:08.888546+00:00 shinyapps[1985429]: 
2020-03-24T14:41:09.758017+00:00 shinyapps[1985429]: Parsed with column specification:
2020-03-24T14:41:09.758019+00:00 shinyapps[1985429]: cols(
2020-03-24T14:41:09.758022+00:00 shinyapps[1985429]: )
2020-03-24T14:41:09.758021+00:00 shinyapps[1985429]:   .default = col_double(),
2020-03-24T14:41:09.758021+00:00 shinyapps[1985429]:   `Province/State` = col_character(),
2020-03-24T14:41:09.786949+00:00 shinyapps[1985429]:   `Province/State` = col_character(),
2020-03-24T14:41:09.786947+00:00 shinyapps[1985429]: Parsed with column specification:
2020-03-24T14:41:09.758021+00:00 shinyapps[1985429]:   `Country/Region` = col_character()
2020-03-24T14:41:09.786948+00:00 shinyapps[1985429]: cols(
2020-03-24T14:41:09.758672+00:00 shinyapps[1985429]: See spec(...) for full column specifications.
2020-03-24T14:41:09.786949+00:00 shinyapps[1985429]:   .default = col_double(),
2020-03-24T14:41:09.786949+00:00 shinyapps[1985429]:   `Country/Region` = col_character()
2020-03-24T14:41:09.786949+00:00 shinyapps[1985429]: )
2020-03-24T14:41:09.787306+00:00 shinyapps[1985429]: See spec(...) for full column specifications.
2020-03-24T14:41:09.826539+00:00 shinyapps[1985429]: Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet,  :
2020-03-24T14:41:09.826541+00:00 shinyapps[1985429]:   GDAL Error 4: Unable to open /srv/connect/apps/covid_dashboard/data/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shx or /srv/connect/apps/covid_dashboard/data/ne_50m_admin_0_countries/ne_50m_admin_0_countries.SHX.Try --config SHAPE_RESTORE_SHX true to restore or create it
2020-03-24T14:41:09.829788+00:00 shinyapps[1985429]: Warning: Error in : Cannot open "/srv/connect/apps/covid_dashboard/data/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shp"; The source could be corrupt or not supported. See `st_drivers()` for a list of supported formats.
2020-03-24T14:41:09.837934+00:00 shinyapps[1985429]:   114: <Anonymous>
2020-03-24T14:41:09.874249+00:00 shinyapps[1985429]: 

我尝试了以下方法来解决这个问题,但还没有找到解决方案:

  1. 使用不同的函数读取形状文件:readOGR() 而不是 st_read() - 没有变化。
  2. 将 .Rmd 文件放在与形状文件相同的目录中,并托管它 - 没有变化。
  3. 更改代码以独立下载、解压缩和打开形状文件 - 运行 进入访问正确目录的问题。

还有什么我可以尝试的吗?有什么简单的东西我想念的吗?让我知道我是否应该在代码中添加更多细节,或者我是否可以澄清任何事情。

我发现 st_read()shiny 环境中可能并不总能正常工作:

Adding a linestring by st_read in Shiny/Leaflet

Shiny leaflet click-event returns NULL when clicked again

为了解决我的问题,我使用st_read()在本地读取形状文件,将其保存为.RData 文件,然后将该.RData 文件加载到应用程序中使用。下面是一个例子:

countries <-st_read("data/ne_50m_admin_0_countries/ne_50m_admin_0_countries.shp", stringsAsFactors=FALSE, quiet=TRUE)
save(countries, file="./shapeFile.RData")
load("shapeFile.RData")

我在托管仪表板时将 .RData 文件上传到 shinyapps.io,现在它似乎可以正常工作,没有出现该错误。