将行添加到shinyTable

时间:2016-05-25 21:59:12

标签: r shiny

我创建了一个具有闪亮和闪亮表格的应用程序。它将csv文件读取为data.frame并保存更改或新行。

如果我添加一个新行,它会被保存但不会显示在表格中。当我重新启动应用程序时,我只能看到表格中的行。如何确保提交按钮添加行而不重新启动应用程序?

编辑:我可以使用闪亮和正常的"生成此功能。使用renderTable的表格,但我无法设法使用shinyTable。

我基本上想要实现的功能是使用shinyTable创建一个可编辑的表格,我可以在其中添加行。

app.R

require(shiny)
datafile<-read.csv("data.csv", header=TRUE, sep=",", quote="")

runApp(
  list(
    ui = fluidPage(
      headerPanel('Title'),
      sidebarPanel(
    textInput("fielda", label="fielda", value=""),
    textInput("fieldb", label="fieldb", value=""),
    actionButton("addButton", "insert data")
      ),
      mainPanel(
    tableOutput("table"))
    ),

    server = function(input, output) {     
      datafile_sample <- datafile[sample(nrow(datafile)),]
      row.names(datafile_sample) <- NULL

      values <- reactiveValues()
      values$df <- datafile_sample
      addData <- observe({

    if(input$addButton > 0) {
      newLine <- isolate(c(input$fielda, input$fieldb))
      isolate(values$df <- rbind(as.matrix(values$df), unlist(newLine)))
      write.csv(values$df, file = "data.csv", row.names=F, quote=F)
    }
      })
      output$table <- renderTable({values$df}, include.rownames=F)
    }
  )
)

data.csv

fielda,fieldb
1,2                                                               
3,4

1 个答案:

答案 0 :(得分:1)

我想我会稍微改变一下。在您编写示例后,read.csv生成的数据框不应在服务器外部调用。它本身应该是被动的。在下面的代码中,我将其置于无效值调用中,并使用read.csv进行初始化。

然后,当您向其添加数据时,可以使用write.table将其添加到现有文件,然后更新反应对象。无论您使用哪种表类型,都应该将所有片段设置为自动更新? (我对[{1}}不熟悉,所以没有多尝试)。

您可以采取一些变体。首先,是否真的有必要将新数据写入文件?也许您可以使用shinyTable将新数据附加到现有数据框。 (相比之下,写/读组合会很慢。)

即使有必要编写新数据,最好还是编写新数据并使用rbind更新应用中的数据框。

库(有光泽)

rbind