Обзор: я использую реактивный компонент для динамического обновления набора данных на основе пользовательского ввода.Это работает без каких-либо проблем.
Дополнительное требование: я хочу раскрасить график только по нажатию кнопки.Текущая настройка: после того, как я нажму кнопку «Цвет», цвет останется, даже если я изменю набор данных.
Я определил один и тот же элемент вывода в блоке наблюдаем, чтобы переопределить элемент по умолчанию, определенный на сервере.Однако это переопределение является постоянным.
library(shiny)
shinyApp(ui = fluidPage(
sidebarPanel(
selectInput(inputId = "dropdown", label = "Select data set:",
choices = c("iris", "mtcars"), selected = "iris")
),
mainPanel(fluidPage(
fluidRow(plotOutput("plot"),
actionButton("color", "Color"))
))
), server = function(input, output) {
get_data <- reactive({
if(input$dropdown == "iris") {
return(list(dat = iris, x = "Sepal.Length", color = "Species"))
} else {
return(list(dat = mtcars, x = "mpg", color = "cyl"))
}
})
output$plot <- renderPlot({
dat <- get_data()
return(plot(dat$dat[, dat$x]))
})
observeEvent(input$color, {
output$plot <- renderPlot({
dat <- get_data()
return(plot(dat$dat[, dat$x], col = dat$dat[, dat$color]))
})
})
})
Фактический результат: Цвет появляется каждый раз при нажатии кнопки «Цвет», даже если я изменяю набор данных.Ожидаемый результат: Цвет должен появиться после нажатия «Цвет» для текущего набора данных.Он не должен появиться, как только я изменю набор данныхОн должен появиться только после повторного нажатия кнопки «Цвет».