Add values to a reactive table in shiny

后端 未结 1 1853
既然无缘
既然无缘 2020-12-01 08:19

I want users of my shiny app to be able to add elements to a table iteratively, but I can\'t work out how to hold the values.

In this example, I want the user to be

相关标签:
1条回答
  • 2020-12-01 09:00

    I think you want to use reactiveValues() to store your data frame. Here is a possible solution:

    library(shiny)
    
    runApp(list(
      ui=pageWithSidebar(headerPanel("Adding entries to table"),
                     sidebarPanel(textInput("text1", "Column 1"),
                                  textInput("text2", "Column 2"),
                                  actionButton("update", "Update Table")),
                     mainPanel(tableOutput("table1"))),
    server=function(input, output, session) {
    values <- reactiveValues()
    values$df <- data.frame(Column1 = NA, Column2 = NA)
    newEntry <- observe({
      if(input$update > 0) {
        newLine <- isolate(c(input$text1, input$text2))
        isolate(values$df <- rbind(values$df, newLine))
      }
    })
    output$table1 <- renderTable({values$df})
    }))
    

    Edit

    To avoid creating an empty row, create an empty data.frame rather than one with NA:

    values$df <- data.frame(Column1 = numeric(0), Column2 = numeric(0))
    

    And indexing seems better for adding the rows than rbind() (which messes up the column names... not sure why):

    isolate(values$df[nrow(values$df) + 1,] <- c(input$text1, input$text2))
    
    0 讨论(0)
提交回复
热议问题