在Shiny应用程序中创建反应式ActionButton

时间:2018-11-30 14:31:54

标签: r csv button shiny

library(shiny)

# ui ##########################

ui <- fluidPage(

   fileInput("csv", label="",
      multiple = TRUE,
      accept = c("text/csv", ".csv")),

   tags$hr(),

   actionButton("show.tbl", "SHOW TABLE"),

   tableOutput("my_tbl")
   )


# server #########################

server <- function(input, output) {

   tbl <- data.frame(Example = LETTERS[1:10]) # will be reactive in reality

   output$my_tbl <- renderTable({
      if(input$show.tbl == 1)
         tbl
    })
 }

# app ######################

shinyApp(ui, server)

因此,我希望此列的每一行都有两个按钮。 第一个按钮将过滤输入文件并显示结果表。 第二个按钮应执行复杂的验证算法。

如何将actionButtons反应性地添加到tableOutput中?

解决方案将在我闪亮的宇宙中带来革命性的变化。

1 个答案:

答案 0 :(得分:1)

使用DT的工作流程:

library(shiny)
library(DT)

ui <- fluidPage(
    verbatimTextOutput(outputId = 'vb'),
    dataTableOutput(outputId = 'table')
)

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

    yourData <- reactive({
        return(mtcars)
    })

    output$vb <- renderPrint({
        req(input$table_rows_selected, cancelOutput = TRUE)
        row_id <- input$table_rows_selected

        row_selected <- yourData()[row_id,]

        return(row_selected)
    })

    output$table <- renderDataTable({

        datatable(
            data = yourData(),
            selection = 'single'
        )
    })
}

shinyApp(ui, server)

这不是每行的一个actionButton,但是您可以观察行选择事件并对此进行操作...在此示例中,我只是打印行,但是您可以执行任何操作。.

希望有帮助。