Один из способов сделать это - добавить observeEvent
для input$species
, где вы бы обновили лепесток 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))
, а также добавил updateSelectInput(session, inputId = "petal", choices=sort(unique(iris[iris$Species == input$species,]$Petal.Width)), selected = "2.3")
в observeEvent
из input$update
.