【问题标题】:R Shiny database managementR闪亮的数据库管理
【发布时间】:2014-02-12 04:26:04
【问题描述】:

我有一个 RStudio Shiny 应用程序,它将用户数据保存在托管我的 Shiny 应用程序的子目录中。 store 数据和 access 它的最佳方式是什么?

代码的相关部分是这样的:

# Save all answers after click on "submit"
observe({
  if(is.null(input$submit) || input$submit == 0) {return()}
  filename <- paste0("/data/answers-",input$userName, "-", as.numeric(Sys.time()), ".RData")
  save(values$A, file = filename, compress = "xz")
})

应用正常:数据成功保存在服务器的data子目录中。

编辑:我将数据保存为 .RData,假设这是一种自然的方法。如果我将数据保存为 .csv,它看起来像这样:

"What do you think about this?","Excellent","Excellent"
"What do you think about that?","Excellent","Excellent"
"User Unique ID","ABC123","DEF456"

除了有更多的行和更多的列。

一种方法是定期从服务器下载数据,如果超过临界大小,则在服务器上将其删除(以防止占用过多空间)。如何最好地做到这一点?

欢迎任何关于数据库管理的提示。

我从闪亮的讨论中交叉发帖,我的问题还没有引起任何反应:

https://groups.google.com/forum/#!topic/shiny-discuss/gOEtUsh00Qs

【问题讨论】:

  • 你能举例说明一个用户的输出可能是什么样子吗?我不会保存到单独的文件中。附加到 txt 或 csv 文件或存储在数据库中。这些关于 SO 12 的问题/答案可能会有所帮助。
  • @Vincent,感谢您的建议,让我编辑问题并澄清一下:-)
  • 按列做事似乎不寻常。为什么不设置一个包含 ID、问题 1 和问题 2 的列的 CSV,然后每一行都是一个用户及其响应?这将允许更轻松的更新,新数据可以附加到 CSV 的末尾。
  • @PatrickT 您是否在我之前的评论中看到了有关数据库的 SO 帖子的链接(单击 1)?那应该会有所帮助。我不确定你如何明智地追加列。通常的附加是按行进行的,每次用户提交时都会发生(请参阅我之前评论中的链接 2)。看来 shujaa 和我同意 :) 每次应用程序保存到文件时,您都可以添加 file.info("myfile.csv")$size ,如果超过一定大小,请通过电子邮件发送给您或通过电子邮件将文件发送给您或其他内容,然后删除文件。
  • @PatrickT 在我看这个之前,我想知道你为什么要使用 Shiny 来做这个?对于基本调查,有更简单/更好的选项,例如 google forms、survey monkey、qualtrics,甚至 django(这是我使用的)。仅供参考,运行要点时出现以下错误(Shiny .8.0.99):read.table 中的警告(file = file,header = header,sep = sep,quote = quote,:readTableHeader 在“survey. csv' takeSingletons 中的错误(结果,shinysession$singleton,desingleton = FALSE):缺少参数“shinysession”,没有默认值

标签: database r rstudio shiny


【解决方案1】:

对不起。评论的字符太多,这是一个更大的框。如果您想将数据附加到文件(例如 csv)中,该文件将按照我提供的链接中的每行发生。所以你应该在发送到文件之前 t() 你的数据。要让脚本以固定的时间间隔运行,请搜索 R 和 Cron(对于 mac 和/或 linux)。使用invalidatelater 在闪亮的应用程序中执行此操作可能更容易。例如,设置一个每小时运行一次的观察者。如果文件大于 X(使用 file.info("myfile.csv")$size),则执行某些操作(例如,如果您的服务器上安装了保管箱,请使用 file.copy 将其移动到您的保管箱帐户。或发送电子邮件它。我没有在 R 中使用电子邮件,但 this 看起来很有希望。

总之:尝试一些东西,如果你遇到困难,请告诉我们:)

【讨论】:

  • 非常感谢您的建议。正如我在之前的评论中所写的,我正在运行保存的东西,我的问题是处理保存的文件。我对您建议每小时或每次文件超过一定大小时都有一个观察者副本非常感兴趣,您有示例代码吗?我不使用保管箱,但如果您认为这是要走的路,我会使用。这听起来比电子邮件更聪明,不是吗?让我用我的完整代码发布一个要点链接,这样我们就不会互相交谈了。将其发布在我的问题下方。谢谢!
  • 不久前我收到了使用数据库表而不是 csv 的建议,这就是我在问题中提到 database management 的原因,但这不是我以前做过的事情,所以我没有没试过。参考。 https://groups.google.com/forum/#!topic/shiny-discuss/jnYTe0rHbqI
  • 每 24 小时将是:invalidateLater(86400000, session) 单位是毫秒......这是一个很大的数字......
  • 嗨 @PatrickT 和 Vincent,reactiveFileReaderreactiveTimer 函数可能会有所帮助
猜你喜欢
  • 2021-06-21
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2014-05-06
  • 1970-01-01
相关资源
最近更新 更多