【发布时间】: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
【问题讨论】:
-
@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”,没有默认值