传单地图不会在开始时加载闪亮

leafletR map doesn't load in shiny on start

我有以下一小段代码(更多更少,如所述 HERE)- 我想控制闪亮的滑块显示的点数。你可以看到初始地图在一段时间后加载(观察控制台输出),但它只会在你使用滑块一次后显示。

但我希望在启动 shiny 应用程序期间创建地图后显示它 - 任何提示如何做到这一点?

## app.R ##
library(shiny)
library(shinydashboard)
library(httr)
library(leafletR)

data(quakes)

# dest_dir=tempdir()
dest_dir="foo_map"

dest_file = paste(dest_dir,"quakes","quakes.html",sep="\")


dat = quakes

createMapHTML <- function(inputFreq=1) {

  q.dat <- toGeoJSON(data=dat[seq(from = 1, to = nrow(dat), by=inputFreq), ], 
                     dest=dest_dir, name="quakes")

  sty <- styleSingle(col="darkblue", fill="darkblue", rad=6)

  # create map
  q.map <- leaflet(data=q.dat, dest=dest_dir,  size = c(1200, 600), incl.data=TRUE,
                   base.map=list("osm"), style=sty, popup="*", controls="all")
}

# createMapHTML()

runApp(list(
ui = dashboardPage(
  dashboardHeader(title = "quakes"),
  dashboardSidebar(
    sliderInput("slider", "#observations frequency:", 1, 100, 1)
  ),
  dashboardBody(
    htmlOutput("inc")
  )
),
server = function(input, output, session) {

  createMap <- reactive({
    createMapHTML(input$slider) 
    return(includeHTML(dest_file))
  })

  output$inc<-renderUI({ createMap() })
}
))

所以 leafletR 包的瓶颈是转换为 GeoJson。此外,嵌入 html 的 "includeHTML & htmlOutput" 解决方法是不稳定的..

为了避免两者,我刚切换到传单包:

## app.R ##
library(shiny)
library(shinydashboard)
library(leaflet)

data(quakes)
dat = quakes


runApp(list(
  ui = dashboardPage(
    dashboardHeader(title = "quakes"),
    dashboardSidebar(
      sliderInput("slider", "#observations frequency:", 1, 100, 1)
    ),
    dashboardBody(
        leafletOutput("map", height = 600)
    )
  ),
  server = function(input, output) {

    output$map <- renderLeaflet({

      map <- leaflet() %>% addTiles()

      map %>% addCircles(data=dat[seq(from = 1, to = nrow(dat), by=input$slider), ],   #input$slider
                         lat = ~lat, lng = ~long, fillOpacity = 1.0)
    })
  }
))