我正在开发的包中的一个函数使用acs::
包(fips.state
对象)中的数据集。我可以通过
data(fips.state, package = "acs"),
但我不知道为我的函数加载这些数据的正确方法。我试过了
@importFrom acs fips.state,
但不会导出数据集。我不想复制数据并将其保存到我的包中,因为这似乎是一个糟糕的开发实践。
我查看过http://r-pkgs.had.co.nz/namespace.html,http://kbroman.org/pkg_primer/pages/docs.html和https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Data-in-packages,但它们不包含有关从一个包到另一个包共享数据集的任何信息。
基本上,我如何创建一个数据集,这是我的包中的函数可用的另一个包中的函数所需要的?
答案 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"
。