首页 > 解决方案 > 如何存储需要从多个 R 项目访问的数据,同时保持代码可移植性?

问题描述

如何存储需要从多个 R 项目访问的数据,同时保持代码可移植性?

从我正在使用 R 处理的项目中,我可以访问存储在系统上几乎任何位置的数据。但是,如果它位于项目之外的任意位置,则会妨碍代码的可移植性。

我有一些项目,我希望能够在两台不同的机器上工作,具有不同的目录设置。对于可以存储在项目中的数据,这可以正常工作,因为我可以使用诸如将项目设置为 RStudio 项目并使用here包来引用数据位置等工具。

但是,我有一些数据(a)我想在多个项目中使用并且(b)非常大。因此,我不想将它复制到我可能使用它的所有项目中。

对于只有我在处理它们的项目,我可以通过设置至少相对于项目的一致文件夹结构并使用相对路径来解决此问题。例如,我可以决定将这些多项目数据集存储在一个数据文件夹中,该文件夹比项目所在的位置高两级。

shared_data_location <- "../../Data/"

但是,在我与合作者一起进行项目的地方,即使这对于他们将能够将代码文件夹和数据文件夹放在哪里也有点强加/假设。

标签: rproject

解决方案


几个想法:

  • 使用包。如果数据不是太大,我认为一个包会很好。放在 GitHub 上,devtools::install_github("jamse/cool_data")然后library(cool_data)放在 R 中。

  • 使用环境变量。所以SHARED_DATA="/Users/jamse/shared/Data"可以放在一个.Renviron文件中。其他用户可能需要选择稍微不同的表单。但是你可以用Sys.getenv("SHARED_DATA")R 代码来访问它。

  • 使用数据库。这涉及更多开销,但 R 可以很好地与数据库(尤其是dplyr. 我的计算机上基本上没有可以直接访问的数据文件。一切都在 PostgreSQL 中(正如Hadley Wickam所讨论的,PostgreSQL 具有比类似系统更多的功能,但涉及一些设置成本)。如果您使用其他语言(例如,Python),这会带来很大的回报,这些语言通常也可以访问数据。

    请注意,如果与其他用户共享并且您的 IT 支持有限,事情可能会变得复杂。但潜在的回报可能更大(例如,我与其他人共享我的数据库服务器,因此数据变得更容易访问)。


推荐阅读