r语言 - 以持久方式将新用户输入和修改保存到本地文件



我正在使用DTedit包,并希望实现两个功能。我正在从包作者的 github 附加代码示例。我想实现的两件事是:

  • 一个按钮,用于在对表进行任何新添加或修改后将数据保存到本地文件。理想情况下,我们可以将所有新增内容(或版本)附加到现有的 csv 文件中。该应用程序将位于 rstudio 服务器中,因此我们可以将此文件添加到 www 文件夹中。

  • 第二个功能是,应用必须从 csv 中提取数据,并在用户打开应用时显示它,而不是像之前代码上显示的空表。

我一直在尝试一些选项,并在互联网上查看了一些教程,但无法解决这两个问题。

library(shiny)
library(DTedit)
##### Create the Shiny server
server <- function(input, output) {
mydata <- data.frame(name = character(),
email = character(),
useR = factor(levels = c('Yes', 'No')),
notes = character(),
stringsAsFactors = FALSE)
##### Callback functions.
my.insert.callback <- function(data, row) {
mydata <- rbind(data, mydata)
return(mydata)
}
my.update.callback <- function(data, olddata, row) {
mydata[row,] <- data[1,]
return(mydata)
}
my.delete.callback <- function(data, row) {
mydata <- mydata[-row,]
return(mydata)
}
##### Create the DTedit object
DTedit::dtedit(input, output,
name = 'mycontacts',
thedata = mydata,
edit.cols = c('name', 'email', 'useR', 'notes'),
edit.label.cols = c('Name', 'Email Address', 'Are they an R user?', 'Additional notes'),
input.types = c(notes='textAreaInput'),
view.cols = c('name', 'email', 'useR'),
callback.update = my.update.callback,
callback.insert = my.insert.callback,
callback.delete = my.delete.callback)
}
##### Create the shiny UI
ui <- fluidPage(
h3('DTedit Template'),
uiOutput('mycontacts')
)
##### Start the shiny app
shinyApp(ui = ui, server = server)

我将支持评论中已有的建议,即存储到诸如sqlite(甚至airtable,如果数据不是特别敏感,则有R接口)之类的数据库中是最好的解决方案。

在这种情况下,您可以使用dtedit的回调将数据存储在数据库中,如dtedit的演示应用程序在DTeditgithub 存储库中所示。

回答"一个按钮"的特定第一点,该按钮在对表进行任何新添加或修改后将数据保存到本地文件。理想情况下,我们可以将所有新添加的内容(或版本)附加到现有的CSV文件中,DT(DTedit所基于的)确实具有将当前表保存到CSV或Excel文件中的功能。

我认为这不是您最好的主意,您的应用程序仍将负责在应用程序启动时"重新加载"此数据,并且正如其他人所说,一次只有一个用户可以写入 CSV/Excel 文件。此外,在本地存储CSV文件通常不会在包的www/文件夹中完成!

尽管如此,如果存储CSV文件是适合应用程序的"快速破解"解决方案,则可以修改DTedit以传递所需的参数以DT以便CSV/Excel保存按钮可用。我和其他人修改了DTedit以允许参数传递到DT::datatableDTedit的修改版本可在Github上找到。显示添加"保存"按钮的小插图在 RPubs 上可用,并在下面复制。

library(DTedit)
server <- function(input, output) {

Grocery_List_Results <- dtedit(
input, output,
name = 'Grocery_List',
thedata = data.frame(
Buy = c('Tea', 'Biscuits', 'Apples'),
Quantity = c(7, 2, 5),
stringsAsFactors = FALSE
),
datatable.call = function(...)
{DT::datatable(..., extensions = 'Buttons')},
datatable.options = list(
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'pdf', 'excel')
)
)
}
ui <- fluidPage(
h3('Grocery List'),
uiOutput('Grocery_List')
)
shinyApp(ui = ui, server = server)

带有复制/保存按钮的数据表的图片

最新更新