R 将行添加到shinyTable
我创建了一个有光泽的应用程序。它将csv文件读取为data.frame并保存更改或新行 如果我添加新行,它将被保存,但不会显示在表中。我只能在重新启动应用程序时看到表中的行。如何确保“提交”按钮在不重新启动应用程序的情况下添加行 编辑:我可以使用shiny和一个“普通”表生成此功能,该表具有R 将行添加到shinyTable,r,shiny,R,Shiny,我创建了一个有光泽的应用程序。它将csv文件读取为data.frame并保存更改或新行 如果我添加新行,它将被保存,但不会显示在表中。我只能在重新启动应用程序时看到表中的行。如何确保“提交”按钮在不重新启动应用程序的情况下添加行 编辑:我可以使用shiny和一个“普通”表生成此功能,该表具有renderable,但我无法使用shinyTable实现此功能 我基本上想要实现的是shinyTable的这个功能,它有一个可编辑的表,我可以在其中添加行 app.R require(shiny) data
renderable
,但我无法使用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)
}
)
)
我想我会用不同的方式来处理这个问题。在编写示例时,不应在服务器外部调用由
read.csv
生成的数据帧。它本身应该是反应性的。在下面的代码中,我将它放在一个被动值调用中,并用read.csv
初始化它
然后,向其中添加数据时,可以使用write.table
将其添加到现有文件中,然后更新反应对象。无论使用哪种表格类型,都应将所有运动中的部件设置为自动更新?(我对shinyTable不太熟悉,所以没有做太多实验)
有几个变种,你可以采取这一点。首先,真的有必要将新数据写入文件吗?也许您可以使用rbind
将新数据附加到现有数据框中。(相比之下,写/读组合的速度会很慢)
即使有必要写入新数据,也最好写入新数据并使用rbind
更新应用程序中的数据框
图书馆(闪亮)
D我想我会用一点不同的方式来处理这个问题。在编写示例时,不应在服务器外部调用由read.csv
生成的数据帧。它本身应该是反应性的。在下面的代码中,我将它放在一个被动值调用中,并用read.csv
初始化它
然后,向其中添加数据时,可以使用write.table
将其添加到现有文件中,然后更新反应对象。无论使用哪种表格类型,都应将所有运动中的部件设置为自动更新?(我对shinyTable不太熟悉,所以没有做太多实验)
有几个变种,你可以采取这一点。首先,真的有必要将新数据写入文件吗?也许您可以使用rbind
将新数据附加到现有数据框中。(相比之下,写/读组合的速度会很慢)
即使有必要写入新数据,也最好写入新数据并使用rbind
更新应用程序中的数据框
图书馆(闪亮)
D我试图回答这个问题,但我对server.R的所有部分都有点困惑。是否可以创建一个更简单的示例,只使用与您的问题相关的代码和一些示例数据?我试图用shiny
,而不是shinytable
,让它更清晰,最简单的工作示例。我试图回答这个问题,但我对server.R的所有部分都有点困惑。是否可以创建一个更简单的示例,只使用与您的问题相关的代码和一些示例数据?我试图用shiny
,而不是shinytable
,让它更清晰,是最简单的工作示例。
fielda,fieldb
1,2
3,4
D <- "fielda,fieldb\n1,2\n3,4"
write(D, file = "data.csv")
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) {
data <- reactiveValues(
file = read.csv("data.csv",
header=TRUE,
sep=",",
quote="")
)
addData <- observeEvent(
input$addButton,
{
newLine <- data.frame(fielda = input$fielda,
fieldb = input$fieldb)
write.table(newLine,
file = "data.csv",
col.names = FALSE,
row.names=FALSE,
quote=FALSE,
append = TRUE,
sep = ",")
data$file <- read.csv("data.csv",
header=TRUE,
sep=",",
quote="")
}
)
output$table <-
renderTable(data$file, include.rownames=FALSE)
}
)
)