【发布时间】:2014-01-08 20:04:05
【问题描述】:
我正在构建一个包含大量内部数据的新 R 包。我决定将包分成两部分:A(包含源代码)和 B(包含数据)。这符合官方 CRAN 政策。数据至关重要,没有它,软件包就无法运行。
我无法从 A 中的源代码链接到 B 中的数据。A 中的所有源代码都在目录 R/ 中,而 B 中的所有数据都在目录 data/ 中。假设dat是B中唯一的数据文件。我尝试了以下:
在 B 的
DESCRIPTION文件中启用LazyData: true,这将导出数据文件。在 A 中,我通过B::dat访问源代码中的数据。问题:R CMD check提出了一个注释,指出B::dat尚未定义,CRAN 维护人员声称这是不好的做法。将 B 中的所有数据保存到
R/目录中的sysdata.rda中,并使用 A 中的B:::dat引用它。问题:CRAN 维护人员声称这是一种不好的做法,因为所有数据都应该在 @987654332 中@,不在R/中。此外,这样您就无法在man/中记录数据文件。无法使用
NAMESPACE文件使用export(dat)命令导出B 中的数据。data(dat,package="B")将数据加载到全局环境中,但作为内部数据,它不应该对用户可见,因此这不起作用。data(dat,package="B",envir=environment())将数据加载到函数调用的本地环境中,但是每次调用函数(可以是多次),加载数据的时间很长,导致计算速度太慢。我也尝试直接加载到包命名空间,但这些命名空间被锁定,这是不允许的。我们如何让数据直接加载到包命名空间中?
关于如何解决这个问题有什么建议吗?这样做的正确方法是什么?理想情况下,数据位于包 B 中的 data/ 目录中,并且包 A 中的源代码在访问它时没有问题。谢谢!
【问题讨论】: