#r #shiny
Вопрос:
Я пытаюсь использовать selectInput в качестве кнопки действия. Мне нравится, как каждый раз, когда я нажимаю кнопку действия, счетчик добавляет цифры. Я пытаюсь добиться того же эффекта для selectInput.
В приведенном ниже примере я демонстрирую функциональность кнопки действия. Я попытался имитировать этот эффект с помощью selectInput с помощью этого кода.
selectnumber <- eventReactive(input$select,
if (input$select == "A") {
input$action 1
})
При таком подходе число обновляется, но это зависит от кнопки действия. Вместо этого я бы хотел, чтобы номер обновлялся всякий раз, когда я выбираю A после того, как я выбрал B.
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("select", "Select Input", choices = c(" ", "A", "B")),
actionButton("action", "Action Button")
),
mainPanel(
textOutput("out1"),
textOutput("out2")
)
)
)
server <- function(input, output) {
output$out1 <- renderText({
paste("Action Button: ", input$action)
})
# count <- reactive({
# input$action
# })
selectnumber <- eventReactive(input$select,
if (input$select == "A") {
input$action 1
})
output$out2 <- renderText({
paste("Select Input: ", selectnumber())
})
}
options(shiny.autoreload = TRUE)
shinyApp(ui = ui, server = server)
Есть ли лучший рабочий способ заставить selectInput вести себя как кнопка действия?
Ответ №1:
Вот один из способов использования observeEvent
и reactiveValues
. Это увеличивает количество при каждом выборе 'A'
в selectInput
.
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("select", "Select Input", choices = c(" ", "A", "B")),
actionButton("action", "Action Button")
),
mainPanel(
textOutput("out1"),
textOutput("out2")
)
)
)
server <- function(input, output) {
rv <- reactiveValues(count = 0)
output$out1 <- renderText({
paste("Action Button: ", input$action)
})
observeEvent(input$select, {
if (input$select == "A") rv$count <- rv$count 1
})
output$out2 <- renderText({
paste("Select Input: ", rv$count)
})
}
options(shiny.autoreload = TRUE)
shinyApp(ui = ui, server = server)