R Shiny中的Reactable表格内部的Leaflet地图

3

我希望在reactable表格的一列中包含地图,每个地图将占据表格内的一个单元格。类似于这样:

enter image description here

我已经尝试了以下方法:

library(shiny)
library(reactable)
library(leaflet)

ui <- fluidPage(
  mainPanel(
    reactableOutput("table")  
  )
)

server <- function(input, output, session) {
  df_aus <- data.frame(country = "australia",
                        latitude = -35.31,
                        longitude = 149.13)
  
  df_belg <- data.frame(country = "belgium",
                         latitude = 50.83,
                         longitude = 4.33)
  
  map_aus = leaflet(df_aus) %>%
    addProviderTiles("CartoDB.Positron")%>%
    addMarkers(
      label = ~ country,
      layerId = ~ country
      )
  map_belg = leaflet(df_belg) %>%
    addProviderTiles("CartoDB.Positron")%>%
    addMarkers(
      label = ~ country,
      layerId = ~ country
    )
  
  df <- data.frame(country = c("australia","belgium"),
                   values = c(10, 20),
                   map = c(map_aus,map_belg))
  
  output$table <- renderReactable({
    reactable(df)
  })
}

shinyApp(ui, server)

然而,尽管这两个地图都能用,但是这条命令返回了一个错误。我在想,也许我需要在列中包含一个 renderLeaflet(),但我不确定应该放在哪里。

我还尝试过像这样添加renderLeaflet():但它也没有起作用。

  df <- data.frame(country = c("australia","belgium"),
                   values = c(10, 20),
                   map = c(leafletOutput('map_1'), leafletOutput('map_2'))
                   )
  
  output$map_1 <- renderLeaflet(map_aus)
  output$map_2 <- renderLeaflet(map_belg)
1个回答

2

您需要执行以下操作:

library(shiny)
library(reactable)
library(leaflet)

ui <- fluidPage(
    mainPanel(
        reactableOutput("table")  
    )
)

server <- function(input, output, session) {
    df_aus <- data.frame(country = "australia",
                         latitude = -35.31,
                         longitude = 149.13)
    
    df_belg <- data.frame(country = "belgium",
                          latitude = 50.83,
                          longitude = 4.33)
    
    map_aus = leaflet(df_aus, height = "100px") %>%
        addProviderTiles("CartoDB.Positron")%>%
        addMarkers(
            label = ~ country,
            layerId = ~ country
        )
    map_belg = leaflet(df_belg, height = "100px") %>%
        addProviderTiles("CartoDB.Positron")%>%
        addMarkers(
            label = ~ country,
            layerId = ~ country
        )
    maps <- list(map_aus, map_belg)
    df <- data.frame(country = c("australia","belgium"),
                     values = c(10, 20),
                     map = NA)
    
    output$table <- renderReactable({
        reactable(data = df, columns = list(
            map = colDef(cell = function(value, index) {
                maps[[index]]
            })
        ), )
    })
}

shinyApp(ui, server)

为了定义自定义列,您需要使用colDef并为该列定义一个函数。

enter image description here


太棒了,运行得非常顺畅! - CodingBiology

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接