【发布时间】:2020-07-03 00:01:39
【问题描述】:
下面的应用程序包含两个selectInputs、letter 和state(包含美国各州的缩写名称)。还有一个uiOutput,在状态selectInput下方显示状态input$state的全称。像这样:
我希望仅当input$letter == b 时才显示州的全名。为此,我在renderUI 调用中添加以下内容:req(isolate(input$letter) == 'b')。但是,这会导致renderUI 永远不会重新执行,即使用户更改了input$state 和input$letter == b。没有渲染:
在上面的屏幕截图中,我预计会显示文本“州名:加利福尼亚”,因为 renderUI 仍然依赖于“州”的值,因此 input$state 的更改应该会导致renderUI 中的表达式重新执行。那么,为什么通过isolate(input$letter) 隔离 letter 的值会改变这种行为呢?
这是重现上述内容的代码:
library(shiny)
shinyApp(
ui = fluidPage(
selectInput('letter', 'letter', letters),
selectInput('state', 'state abbreviation', state.abb),
uiOutput('state_full')
),
server = function(input, output, session) {
output$state_full <- renderUI({
# req(isolate(input$letter) == 'b')
paste('state name:', state.name[which(state.abb == input$state)])
})
}
)
【问题讨论】: