使用R包分发半实时数据集有哪些方法?

时间:2012-12-28 19:25:56

标签: r packaging

我正在使用devtools构建一个供内部使用的包。我希望从文件/连接中获取数据包的负载(根据构建的日期包而不同)。数据很大,因此在打包过程中解析和加载数据需要一次性成本。

目前,我在R/下有一个data.R文件,用于将数据分配给包级变量,这些值是在包安装期间分配的(或者至少是看起来正在发生的情况)。这种不太理想的设置大多有效。为了使包的所有实例具有相同的数据,我必须使用包分发数据文件(目前在构建包之前通过帮助脚本将其复制到inst/)而不是仅仅拥有它被包装在一起。必须有更好的方法。

如:

  • 在程序包构建期间生成.rda文件(但这不需要在程序包安装期间运行相同的代码)
    • 我可以使用Makefile执行此操作,但这似乎有点矫枉过正
    • 我可以使用仅在程序包构建期间运行而不是在安装期间运行的R代码吗?
  • data/中运行R代码
    • 但是数据是使用相关包中的代码进行的。我可以使用Collate解决这个问题(我认为),但是我必须维护所有.R文件的顺序(但是由于增加了复杂性,我可能会使用Makefile?)
  • 构建两个包,一个包含我想要的所有代码,一个包含数据。
  • 我没有想到的明显,聪明的事情。

tl; dr:有哪些方法可以将动态变化数据的快照添加到为部署冻结的R软件包中?

1 个答案:

答案 0 :(得分:2)

作为@BenBolker points out in the comments above,将数据集拆分为不同的包在社区中有先例(最值得注意的是核心包datasets),并且还有其他好处。

功能与数据的分离也使得使用最新功能更容易处理数据的历史版本。

我目前有一个tools-to-munge包和一个things-to-munge包。使用帮助程序脚本,我可以构建tools-to-munge并在两个程序包的Suggests中设置Depends(或DESCRIPTION),以指向适当的程序包递增版本。在构建新的tools-to-munge包之后,我可以根据需要使用things-to-munge包中的函数构建tools-to-munge包。