将 R Shiny 反应性 SelectInput 值传递给 selectizeInput
Passing R Shiny reactive SelectInput value to selectizeInput
我的 Shiny 应用程序使用来自鸟类地图集的开放数据,包括 lat/lon 物种坐标。鸟类名称有不同的语言,加上首字母缩写词。
想法是用户首先选择语言(或缩写词)。根据选择,Shiny 呈现一个包含独特鸟类名称的 selectizeInput 列表。 Then, when one species is selected, a leaflet map is generated.
我已经完成了几个闪亮的应用程序,但这次我错过了一些明显的东西。当应用程序启动时,一切都很好。但是,选择新语言时不会重新呈现 selectizeInput 列表。
所有当前代码和一些示例数据都在这里作为 GitHub 要点 https://gist.github.com/tts/924b764e7607db5d0a57
如果有人能指出我的问题,我将不胜感激。
问题是 renderUI
和 birds
反应块都依赖于 input$lan
输入。
如果你在 birds
块中添加 print(input$birds)
,你会看到它在 renderUI
有机会更新它们以适应新语言之前使用鸟的名字. data
你然后传递 leaflet
图是空的。
尝试在 birds 表达式中的 input$lan
周围添加 isolate
,使其仅依赖于 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
,您还可以使用(替换 uiOutput
)在 ui.R
中创建 selectizeInput
:
selectizeInput(
inputId = "birds",
label = "Select species",
multiple = F,
choices = unique(data[["englanti"]])
)
并在您的 server.R
中使用以下方式更新它:
observe({
updateSelectizeInput(session, 'birds', choices = unique(data[[input$lan]]))
})
我的 Shiny 应用程序使用来自鸟类地图集的开放数据,包括 lat/lon 物种坐标。鸟类名称有不同的语言,加上首字母缩写词。
想法是用户首先选择语言(或缩写词)。根据选择,Shiny 呈现一个包含独特鸟类名称的 selectizeInput 列表。 Then, when one species is selected, a leaflet map is generated.
我已经完成了几个闪亮的应用程序,但这次我错过了一些明显的东西。当应用程序启动时,一切都很好。但是,选择新语言时不会重新呈现 selectizeInput 列表。
所有当前代码和一些示例数据都在这里作为 GitHub 要点 https://gist.github.com/tts/924b764e7607db5d0a57
如果有人能指出我的问题,我将不胜感激。
问题是 renderUI
和 birds
反应块都依赖于 input$lan
输入。
如果你在 birds
块中添加 print(input$birds)
,你会看到它在 renderUI
有机会更新它们以适应新语言之前使用鸟的名字. data
你然后传递 leaflet
图是空的。
尝试在 birds 表达式中的 input$lan
周围添加 isolate
,使其仅依赖于 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
,您还可以使用(替换 uiOutput
)在 ui.R
中创建 selectizeInput
:
selectizeInput(
inputId = "birds",
label = "Select species",
multiple = F,
choices = unique(data[["englanti"]])
)
并在您的 server.R
中使用以下方式更新它:
observe({
updateSelectizeInput(session, 'birds', choices = unique(data[[input$lan]]))
})