My Shiny 应用程序使用来自鸟类 map 集的开放数据,包括按物种划分的纬度/经度坐标。鸟类的名称有不同的语言,加上首字母缩写词。

这个想法是用户首先选择语言(或首字母缩写词)。根据选择,Shiny 呈现唯一鸟类物种名称的 selectizeInput 列表。 Then, when one species is selected, a leaflet map is generated.

我已经完成了几个 Shiny 应用程序,但这次我错过了一些明显的东西。当应用程序启动时,一切都很好。但是,选择新语言时不会重新呈现 selectizeInput 列表。

带有一些示例数据的所有现有代码都作为 GitHub Gist https://gist.github.com/tts/924b764e7607db5d0a57 在这里

如果有人能指出我的问题,我将不胜感激。

最佳答案

问题是 renderUIbirds react 块都依赖于 input$lan 输入。

如果您在 print(input$birds) 块中添加 birds,您将看到它在 renderUI 有机会更新它们以适应新语言之前使用鸟类的名称。您然后通过 data 图的 leaflet 是空的。

尝试在鸟类表达式中的 isolate 周围添加 input$lan ,以便它仅依赖于 input$birds :

birds <- reactive({
    if( is.null(input$birds) )
      return()
    data[data[[isolate(input$lan)]] == input$birds, c("lon", "lat", "color")]
  })

当您更改语言时, renderUI 将更改 selectize ,这将触发 input$birds 并更新数据。

除了使用 renderUI ,您还可以使用(替换 selectizeInput )在 ui.R 中创建 uiOutput :
selectizeInput(
        inputId = "birds",
        label = "Select species",
        multiple  = F,
        choices = unique(data[["englanti"]])
      )

在您的 server.R 中,使用以下命令更新它:
observe({
    updateSelectizeInput(session, 'birds', choices = unique(data[[input$lan]]))
  })

关于r - 将 R Shiny 响应式(Reactive) SelectInput 值传递给 selectizeInput,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28970358/

10-12 13:56