在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
软件包中无法实现此想法,我将非常感谢。
答案 0 :(得分:1)
在装入的包中搜索数据的方式与命名空间中搜索功能的方式不同,因此从技术上讲,它不是导出。但是您可以重新导出另一个程序包的数据集,除了一个例外,它的工作方式相同:使用data()
函数将不会找到它,该函数只是在data/
目录中搜索数据对象。下面的示例:
的工作方式就像是“延迟加载”的数据集,例如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