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))
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…