在 r 包中重新导出数据集

reexporting datasets in r packages

R 包中,可以重新导出函数。这使得回收相同的功能变得容易,而不必在不同的包中重复代码。

例如,devtools::session_info 函数是 sessioninfo::session_info:

的再导出
#' @export
#' @importFrom sessioninfo session_info
sessioninfo::session_info

我想知道数据集是否也可以做类似的事情。我有两个不同的包,我在两个包中使用相同的数据集。这并不理想,因为如果我需要更改某些内容,我总是需要确保更改需要在两个包中进行,这增加了出错的可能性。

但我不知道如何实现。如果我这样做:

#' @export
#' @importFrom groupedstats Titanic_full
groupedstats::Titanic_full

我收到以下错误:

object 'Titanic_full' is not exported by 'namespace:groupedstats'

从 (https://github.com/IndrajeetPatil/groupedstats/blob/master/NAMESPACE) 开始就有意义了。但是这个数据集 存在于包中:

> vcdExtra::datasets("groupedstats")
Loading package: groupedstats 
             Item      class     dim                                                           Title
1    Titanic_full data.frame  2201x5                                                Titanic dataset.
2 intent_morality data.frame  4016x9               Moral judgments about third-party moral behavior.
3     movies_long data.frame  2433x8 Movie information and user ratings from IMDB.com (long format).
4     movies_wide data.frame 1813x14 Movie information and user ratings from IMDB.com (wide format).

因此,对于如何实现此类数据再导出的任何想法,或者如果这在 R 包中是不可能的,我将不胜感激。

以不同于函数命名空间的方式在加载的包中搜索数据,因此从技术上讲它不是导出。但是您可以重新导出另一个包的数据集,这将以相同的方式操作,但有一个例外:使用 data() 函数不会找到它,它只是在 data/ 目录中搜索数据对象。下面的例子:

像 "lazy loaded" 数据集一样工作,例如myiris 如果您的包裹已附加,或使用 yourpackage::myiris;

不会data(myiris, package = "yourpackage")一起工作。

#' @inherit datasets::iris description source references title
#' @examples
#' # works
#' testdata::myiris
#' # fails
#' data(myiris, package = "yourpackage")
#' @export
myiris <- datasets::iris