使用Shiny downloadHandler将多个数据帧保存到单个csv文件

时间:2017-09-26 19:04:43

标签: r export-to-csv shiny

我有一个RShiny应用程序,我在不同的标签设置面板上显示多个数据帧。我希望能够将每个面板上出现的数据帧写入每个面板的一个csv文件。我目前正在尝试使用Shiny的downloadHandler选项来渲染它。

做了一点研究,发现我可以使用sink()函数将R输出转移到文件中。

这是我尝试将sink()合并到服务器上的一个这样的按钮上.R侧

output$downloadDemographic <- downloadHandler(
filename = function() {
  paste('Demographics', '.csv', sep='')
},
content = function(file) {
  sink("Demographics.csv")
  cat('Population Demographics')
  write.csv(Population)
  cat('Geography Demographics')
  write.csv(Geography)
  sink()
}
) 

其中PopulationGeography是两个具有相同列数但名称不同的数据框。

接收器功能会自动将上述数据帧写入csv文件&#39; Demographics.csv&#39;进入我的工作目录,但Shiny上的downloadHandler选项提示用户动态保存csv文件。有点像我想在这里实现的那样。我可能遗漏了一些东西或犯了一个明显的错误,我不知道。

所需的输出 - https://i.stack.imgur.com/yddrE.jpg

  

我可以渲染多个下载按钮,将每个数据帧写入多个csv文件,但是我的一些标签设置元素有多达8个数据帧,这会使UI变得混乱。

  

在写入csv文件之前,我可以将多个数据帧强制转换为单个数据帧,但它们都是不等大小的数据帧,并将它们格式化为所需的输出将是一个巨大的痛苦。

有关我如何以其他方式建立此事的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

其他选择:

  1. Write an Excel workbook with one sheet per dataframe
  2. Zip together multiple csv files
  3. 以下是使用R数据集包中的四个数据帧的两个选项的示例。

    perl -ne 'push @a, $_; END{ print sort { length $a <=> length $b } @a }' file