我的Shiny应用程序使用来自鸟类地图集的开放数据,包括物种的纬度/经度坐标.鸟类名称有不同的语言,加上作为首字母缩略词.
想法是用户首先选择语言(或首字母缩略词).根据选择,Shiny呈现了一个独特鸟类名称的选择性输入列表.然后,当选择一个物种时,生成小叶图.
我做了几个Shiny应用程序,但这次我错过了一些明显的东西.当应用程序启动时,一切都很好.但是,选择新语言时,不会重新呈现selectizeInput列表.
所有带有一些示例数据的当前代码都在这里作为GitHub Gist https://gist.github.com/tts/924b764e7607db5d0a57
如果有人能够指出我的问题,我将不胜感激.
问题是反应块renderUI和birds反应块都依赖于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您也可以selectizeInput在ui.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)