5

我正在开发的包中的一个函数使用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,但它们不包含有关从一个包到另一个包共享数据集的任何信息。

基本上,我如何制作另一个包中的函数所需的数据集,该数据集可用于我的包中的函数?

4

2 回答 2

2

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


is_starwars_character <- function(character) {
  character %in% dplyr::starwars$name
}
is_starwars_character("Luke Skywalker")
#> [1] TRUE
is_starwars_character("Indiana Jones")
#> [1] FALSE
于 2018-02-09T23:46:28.490 回答
2

正如@paleolimbot 所建议的那样,如果您无法控制acspackage,那么acs::fips.state似乎是您最好的选择。

如果您要经常调用fips.state,那么我建议您通过 制作本地副本fips.state <- acs::fips.state,因为从其他包中查找对象的成本很小,您可能会很好地避免多次发生这种情况。

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

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

然后在命名空间中:

export(fips.state)

或者如果使用 roxygen2:

#' Fips state
#' @name fips.state
#' @export
"fips.state"

然后在您自己的包中,您可以简单地@importFrom acs fips.state.

于 2019-07-11T08:46:51.593 回答