将R Shiny反应性SelectInput值传递给selectizeInput

tts*_*tts 3 r shiny

我的Shiny应用程序使用来自鸟类地图集的开放数据,包括物种的纬度/经度坐标.鸟类名称有不同的语言,加上作为首字母缩略词.

想法是用户首先选择语言(或首字母缩略词).根据选择,Shiny呈现了一个独特鸟类名称的选择性输入列表.然后,当选择一个物种时,生成小叶图.

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

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

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

Nic*_*icE 6

问题是反应块renderUIbirds反应块都依赖于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")]
  })
Run Code Online (Sandbox Code Playgroud)

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

renderUI您也可以selectizeInputui.R使用中创建(替换uiOutput):而不是使用:

selectizeInput(
        inputId = "birds", 
        label = "Select species",
        multiple  = F,
        choices = unique(data[["englanti"]])
      )
Run Code Online (Sandbox Code Playgroud)

并在您的server.R,使用以下更新它:

observe({
    updateSelectizeInput(session, 'birds', choices = unique(data[[input$lan]]))
  })
Run Code Online (Sandbox Code Playgroud)