我创建了一个具有闪亮和闪亮表格的应用程序。它将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
答案 0 :(得分:1)
我想我会稍微改变一下。在您编写示例后,read.csv
生成的数据框不应在服务器外部调用。它本身应该是被动的。在下面的代码中,我将其置于无效值调用中,并使用read.csv
进行初始化。
然后,当您向其添加数据时,可以使用write.table
将其添加到现有文件,然后更新反应对象。无论您使用哪种表类型,都应该将所有片段设置为自动更新? (我对[{1}}不熟悉,所以没有多尝试)。
您可以采取一些变体。首先,是否真的有必要将新数据写入文件?也许您可以使用shinyTable
将新数据附加到现有数据框。 (相比之下,写/读组合会很慢。)
即使有必要编写新数据,最好还是编写新数据并使用rbind
更新应用中的数据框。
库(有光泽)
rbind