0

我想根据用户从 DT 表中选择的不同行来更新 numericInput 值。

下面是我的简单示例。因此,如果用户选择第一行,则该值应为 50。如果用户选择第二行,则该值应为 100。有没有不使用“刷新”按钮的方法?

library(shiny)
library(DT)


ui <- fluidPage(
    sidebarLayout(
        sidebarPanel(
            numericInput("price",
                        "Average price:",
                        min = 0,
                        max = 50,
                        value = 0),

            actionButton('btn', "Refresh")
        ),

        mainPanel(
            DT::dataTableOutput('out.tbl')
        )
    )
)

server <- function(input, output, session) {

    price_selected <- reactive({
        if (input$out.tbl_rows_selected == 1) { 
            price = 50
        } else {
            price = 100
        } 
    })

    observeEvent (input$btn, {
        shiny::updateNumericInput(session, "price",  value = price_selected())
    })

    output$out.tbl <- renderDataTable({
        Level1 <- c("Branded", "Non-branded")
        Level2 <- c("A", "B")
        df <- data.frame(Level1, Level2)
    })
}

shinyApp(ui = ui, server = server)
4

1 回答 1

1

使用您的反应变量的解决方案

price_selected <- reactive({
    if (isTRUE(input$out.tbl_rows_selected == 1)) { 
        price = 50
    } else {
        price = 100
    } 
})

shiny::observe({
    shiny::updateNumericInput(session, "price",  value = price_selected())
})

注意可以input$out.tbl_rows_selected直接观察(不需要反应变量)

于 2019-11-28T13:57:43.037 回答