在R包中使用数据集

3
我正在尝试在CRAN上获取我的软件包(https://github.com/jmcurran/relSim)的最新版本。由于在一个未公开的函数中使用了包含在软件包中的数据集(即用户必须使用:::运算符才能使用它),因此该软件包被拒绝了。以下是代码片段:
testIS = function(nc = c(3, 2), locus = 1, seed = 123456){
  set.seed(seed)
  np = 2 * nc[2]
  freqs = USCaucs$freqs

数据集已包含在软件包中,根据 Hadley 的建议,我在 DESCRIPTION 文件中加入了 LazyData: true。然而,我从 https://win-builder.r-project.org 收到了一条提示信息,但我不知道如何解决。

 * checking R code for possible problems ... [11s] NOTE
 testIS: no visible binding for global variable 'USCaucs'
 Undefined global functions or variables::
   USCaucs

我觉得这很令人沮丧,因为正如我所说,这个功能甚至没有被导出(它也可以在不报错的情况下工作,因为该包已加载此数据集)。非常感谢您的帮助。


1
包裹因备注被拒绝了吗?你有得到任何进一步的细节吗?对于内部数据,建议使用R/sysdata.rda - alan ocallaghan
是的@aocall - 现在有一个CRAN预检系统,似乎是基于winbuilder。你促使我将解决方案发布为我的问题的答案,就像你所建议的那样。 - James Curran
1个回答

2
解决方案似乎需要一些重复。根据Thomas Lumley的建议,我将对象放置在R/sysdata.rda中,并且也放在 data/USCaucs.rda 中。我遵循了Hadley Wickham的建议,使用参数internal设置为TRUEdevtools :: use_data,以便以正确的方式保存为软件包。
如上所述,此解决方案涉及复制数据。对于像这里一样小的对象,这不是问题,但我认为还有更加优雅的解决方案。

你可以将一个文件硬链接到另一个文件,并在data-raw/USCaucs.rda中编写脚本来完成这一步骤。 - alan ocallaghan
1
我有同样的情况,数据被用在函数内部,但对于用户来说也是一个有用的参考。我想我会像你一样复制它。 - see24
1
我和你@see24有着完全相同的情况,但是我无法忍受将相同的数据集同时用作内部和导出的不雅之处(不确定为什么!)。对我有效的解决方案是在需要引用导出数据时使用包命名空间(以使其作为内部处理?)- 参见此答案https://dev59.com/-6zla4cB1Zd3GeqPF_8f#51410084。这感觉很奇怪,因为在一个包中,通常不需要给自己的函数加上命名空间引用 - 但是对于数据(如果不是内部的话)则需要 - 我想是这样。另一种方法是调用data(mydataset) - Francis Barton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接