一种方法是为input$species 添加另一个observeEvent,您将在其中更新selectInput 花瓣。以下是修改后的代码:
library(shiny)
data(iris)
# ui function
ui <- fluidPage(
uiOutput("species.out"),
uiOutput("petal.out"),
actionButton("update", label = "Update")
)
# server function
server <- function(input, output, session) {
output$species.out = renderUI({
selectInput("species", label = "", choices = sort(unique(iris$Species)))
})
output$petal.out = renderUI({
req(input$species)
selectInput("petal", label = "", choices = sort(unique(iris[iris$Species == input$species,]$Petal.Width)))
})
observeEvent(input$update,
{
updateSelectInput(session, inputId = "species", selected = "virginica")
# updateSelectInput(session, inputId = "petal", choices=sort(unique(iris[iris$Species == input$species,]$Petal.Width)), selected = "2.3")
})
observeEvent(input$species,{
req(input$petal)
updateSelectInput(session, inputId = "petal", choices=sort(unique(iris[iris$Species == input$species,]$Petal.Width)), selected = "2.3")
} )
}
shinyApp(ui = ui, server = server)
希望对你有帮助!
编辑:
要更新input$petal,即使input$species 不是以下代码也可以:
library(shiny)
data(iris)
# ui function
ui <- fluidPage(
uiOutput("species.out"),
uiOutput("petal.out"),
actionButton("update", label = "Update")
)
# server function
server <- function(input, output, session) {
output$species.out = renderUI({
selectInput("species", label = "", choices = sort(unique(iris$Species)))
})
output$petal.out = renderUI({
req(input$species)
selectInput("petal", label = "", choices = sort(unique(iris[iris$Species == input$species,]$Petal.Width)))
})
observeEvent(input$update,
{
updateSelectInput(session, inputId = "species", selected = "virginica")
updateSelectInput(session, inputId = "petal", choices=sort(unique(iris[iris$Species == input$species,]$Petal.Width)), selected = "2.3")
})
observeEvent(input$species,{
if(input$petal == "" || req(input$petal))
updateSelectInput(session, inputId = "petal", choices=sort(unique(iris[iris$Species == input$species,]$Petal.Width)), selected = "2.3")
} )
}
shinyApp(ui = ui, server = server)
这里我将条件req(input$petal)更改为if(input$petal == "" || req(input$petal)),并在input$update的observeEvent中添加了updateSelectInput(session, inputId = "petal", choices=sort(unique(iris[iris$Species == input$species,]$Petal.Width)), selected = "2.3")。