带有传单地图的循环闪亮模块始终显示相同的标记?

时间:2019-01-07 20:08:44

标签: r shiny r-leaflet shinymodules

我在一个闪亮的模块上写了一个循环,在传单地图上显示标记。但是,在我所有的地图上都显示了相同的标记(我想在不同的地图上显示import tkinter as tk class DATA: """ Data container """ list_x = [] list_y = [] class EntryTable(tk.Toplevel): def __init__(self, parent): super().__init__(parent) """ Code creating frames, buttons, etc """ """ Code adding something to DATA.list_x, DATA.list_y """ DATA.list_x = [1, 2, 3] DATA.list_y = [4, 5, 6] class PlotWin(tk.Toplevel): def __init__(self, parent): super().__init__(parent) """ Code creating frames, buttons, etc """ """ Code doing something with DATA.list_x, DATA.list_y """ print('plot:{}'.format((DATA.list_x, DATA.list_y))) class App(tk.Tk): def __init__(self): super().__init__() """ Code adding main window widgets and toolbar """ """ Code adding Toplevel window's """ entryTable = EntryTable(self) plotWin = PlotWin(self) if __name__ == '__main__': App().mainloop() 中的每对坐标)。我不知道为什么,但是数据子集似乎失败了。谁能解释为什么会这样以及如何解决呢?

data.frame

1 个答案:

答案 0 :(得分:0)

不能100%知道为什么,但是如果您使用callModule命令并将其从观察部分中取出并使用lapply代替for循环,则它似乎可以工作。

library(shiny)
library(leaflet)

Data <- data.frame(longitude = c(11, 12, 14), latitude = c(50, 49, 51))

mod_map_ui <- function(.id) {
  ns <- shiny::NS(.id)
  leafletOutput(ns("map"))
}

mod_map <- function(input, output, session, .Data) {
  output$map <- renderLeaflet({
    leaflet() %>% 
      addTiles() %>%
      addMarkers(data = .Data)
  })
}


ui <- fluidPage(
  uiOutput("list")
)

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

  observe({
    tag.list <- tagList()
    for (i in seq_len(NROW(Data))) {
      tag.list <- tagAppendChildren(
        tag.list,
        mod_map_ui(paste0("map_mod", i)), br()
      )
    }

    output$list <- renderUI({
      tag.list
    })
  })

#####
  lapply(seq_len(NROW(Data)), function(i){
    callModule(mod_map, paste0("map_mod", i), .Data = Data[i, ])
  })
#####

}

shinyApp(ui, server)