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 在这里
如果有人能指出我的问题,我将不胜感激。
最佳答案
问题是 renderUI
和 birds
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/