如何从我的包中加载另一个包中的数据

时间:2018-02-09 22:38:09

标签: r package-development

我正在开发的包中的一个函数使用acs::包(fips.state对象)中的数据集。我可以通过

将这些数据加载到我的工作环境中
data(fips.state, package = "acs"),

但我不知道为我的函数加载这些数据的正确方法。我试过了

 @importFrom acs fips.state,

但不会导出数据集。我不想复制数据并将其保存到我的包中,因为这似乎是一个糟糕的开发实践。

我查看过http://r-pkgs.had.co.nz/namespace.htmlhttp://kbroman.org/pkg_primer/pages/docs.htmlhttps://cran.r-project.org/doc/manuals/r-release/R-exts.html#Data-in-packages,但它们不包含有关从一个包到另一个包共享数据集的任何信息。

基本上,我如何创建一个数据集,这是我的包中的函数可用的另一个包中的函数所需要的?

2 个答案:

答案 0 :(得分:1)

您始终可以在程序包代码中的任何位置使用package::object_name(例如dplyr::starwars),而无需使用import语句。


is_starwars_character <- function(character) {
  character %in% dplyr::starwars$name
}
is_starwars_character("Luke Skywalker")
#> [1] TRUE
is_starwars_character("Indiana Jones")
#> [1] FALSE

答案 1 :(得分:0)

如果您无法控制acs程序包,那么{@ 1eo}似乎是最好的选择,如@paleolimbot所建议。

如果您要频繁调用acs::fips.state,那么我建议您通过fips.state进行本地复制,因为从其他包中查找对象可能会花费很小的成本做得很好,避免多次发生。

但是如果您能够影响fips.state <- acs::fips.state软件包(即使您没有,我认为这是一个有用的概括),那么mikefc提出了另一种解决方案,这是将acs对象设置为包的内部对象,然后将其导出:

fips.state

然后在NAMESPACE中:

usethis::use_data(fips.state, other.data, internal = FALSE)

或使用roxygen2:

export(fips.state)

然后在您自己的程序包中,只需#' Fips state #' @name fips.state #' @export "fips.state"