Как сопоставить большие наборы данных с R блестящим? - PullRequest
0 голосов
/ 23 апреля 2020

Есть ли способ улучшить скорость рендеринга / качество сопоставления больших наборов данных с блестящим приложением?

Мы надеялись использовать блестящий для создания приложения, которое показывало бы местоположение некоторых наших собранных данных, однако мы находим, что это может быть неосуществимо. Наш полный набор дат близок к 1 миллиону строк, и мы обнаруживаем, что чем длиннее таблица, тем сложнее использовать карту. До сих пор мы использовали пакет листовки для отображения, и наш набор дат импортируется в виде файла .RData. Ищите советы по альтернативным библиотекам или методам кодирования, которые могут поставить под угрозу повышение скорости и качества.

Ниже приведен пример с некоторыми случайными выборочными данными, чтобы показать проблему, с которой мы столкнулись.

################################################################################################
################################################################################################
# Sec 1a. Needed Libaries & Input Files

# Libaries
library(shiny) # How we create the app.
library(shinycssloaders) # Adds spinner icon to loading outputs.
library(shinydashboard) # The layout used for the ui page.
library(leaflet) # Map making. Leaflet is more supported for shiny.
library(dplyr) # Used to filter data for plots.


FileIn <- data.frame(SiteID = 1:160000  , Longitude = rnorm(160000, mean=-105, sd=4),  Latitude = rnorm(160000, mean=35, sd=4))

################################################################################################
################################################################################################
# Sec 2. The UI (HTML Page)

ui <- dashboardPage(

  dashboardHeader(
    title ="Sample point data"
  ), #enddashboardHeader

  dashboardSidebar(
  ), #enddashboardSidebar

  dashboardBody(
    tabsetPanel(
      tabPanel("Map", fluidRow(withSpinner(leafletOutput("mapA"))))
    ) #endtabsetPanel
  ) #enddashboardBody

) #end dashboardPage

################################################################################################
################################################################################################
# Sec 3. The Server (function)

server <- function(input, output, session) {


  #### The Map ouput.
  output$mapA <- renderLeaflet({
    leaflet(data = FileIn) %>%
      addTiles("Add Map Title Here") %>%
      addProviderTiles("Esri.WorldImagery") %>%
      addCircleMarkers(
        lng = ~Longitude,
        lat = ~Latitude,
        radius = 1)
  })


} #endServer


################################################################################################
################################################################################################
# Sec 4. Run the application.

shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 24 апреля 2020

Вы не возражаете против использования кластеризации маркеров? clusterOptions = markerClusterOptions()

library(shiny) # How we create the app.
library(shinycssloaders) # Adds spinner icon to loading outputs.
library(shinydashboard) # The layout used for the ui page.
library(leaflet) # Map making. Leaflet is more supported for shiny.
library(dplyr) # Used to filter data for plots.


FileIn <- data.frame(SiteID = 1:160000  , Longitude = rnorm(160000, mean=-105, sd=4),  Latitude = rnorm(160000, mean=35, sd=4))

################################################################################################
################################################################################################
# Sec 2. The UI (HTML Page)

ui <- dashboardPage(

  dashboardHeader(
    title ="Sample point data"
  ), #enddashboardHeader

  dashboardSidebar(
  ), #enddashboardSidebar

  dashboardBody(
    tabsetPanel(
      tabPanel("Map", fluidRow(withSpinner(leafletOutput("mapA"))))
    ) #endtabsetPanel
  ) #enddashboardBody

) #end dashboardPage

################################################################################################
################################################################################################
# Sec 3. The Server (function)

server <- function(input, output, session) {


  #### The Map ouput.
  output$mapA <- renderLeaflet({
    leaflet(data = FileIn) %>%
      addTiles("Add Map Title Here") %>%
      addProviderTiles("Esri.WorldImagery") %>%
      addCircleMarkers(
        lng = ~Longitude,
        lat = ~Latitude,
        radius = 1,
        clusterOptions = markerClusterOptions())
  })


} #endServer


################################################################################################
################################################################################################
# Sec 4. Run the application.

shinyApp(ui = ui, server = server)
...