在我的RStudio闪亮应用程序中,我有观察者更新selectInputs。有没有办法避免一连串的反应?如果用户更改input1,我希望它更新input2。但是我不想让它触发对input3的更新,这就是下面发生的事情。
例如,如果我可以将等效的isolate
放在一起并更新,那将是理想的:
isolate(updateSelectInput())
这样它可以进行初始更新,但不会触发任何其他更改。
这可能吗?
server<-function(session, input, output) {
observeEvent(input$input1, {
updateSelectInput(session, "input2", selected="3")
})
observeEvent(input$input2, {
updateNumericInput(session, "input3",value=round(rnorm(1),2))
# resetting input 2
updateSelectInput(session, "input2", selected="1")
})
}
ui<-fluidPage(
# Application title
titlePanel("Hello Shiny!"),
# Sidebar with a slider input for the number of bins
sidebarLayout(
sidebarPanel(
selectInput("input1", label="Input1", choices=c("a", "b", "c"), selected="a"),
selectInput("input2", label="Input2", choices=c("1", "2", "3"), selected="1"),
numericInput("input3", label="Input3", value=3)
),
mainPanel(
)
)
)
shinyApp(ui=ui, server=server)
答案 0 :(得分:0)
我同意Pork Chop的说法,你可能更好地重新思考这个设计并以其他方式触发更新(但我猜你最了解你的应用)。有一种简单而丑陋的方法可以解决这个问题,并且仍然有相同的观察者:
C3
修改1 一个更通用的解决方案,但仍然很难看。
server<-function(session, input, output) {
run.once <<- FALSE
observeEvent(input$input1, {
run.once <<- TRUE
updateSelectInput(session, "input2", selected="3")
})
observeEvent(input$input2, {
if (run.once==TRUE){
run.once <<- FALSE
return(NULL)
}
updateNumericInput(session, "input3",value=round(rnorm(1),2))
# resetting input 2
updateSelectInput(session, "input2", selected="1")
})
}
ui<-fluidPage(
# Application title
titlePanel("Hello Shiny!"),
# Sidebar with a slider input for the number of bins
sidebarLayout(
sidebarPanel(
selectInput("input1", label="Input1", choices=c("a", "b", "c"), selected="a"),
selectInput("input2", label="Input2", choices=c("1", "2", "3"), selected="1"),
numericInput("input3", label="Input3", value=3)
),
mainPanel(
)
)
)
shinyApp(ui=ui, server=server)
希望这有帮助