【问题标题】:How do I load data from another package from within my package如何从我的包中加载另一个包中的数据
【发布时间】:2018-02-09 22:38:09
【问题描述】:

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

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

【问题讨论】:

    标签: r package-development


    【解决方案1】:

    如果您无法控制 acs 软件包,那么 @paleolimbot 建议,acs::fips.state 似乎是您的最佳选择。

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

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

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

    然后在 NAMESPACE 中:

    export(fips.state)

    或者如果使用 roxygen2:

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

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

    【讨论】:

    • 当我尝试按照您的建议导出数据集时,出现“对象列为导出,但不在命名空间中”错误。此外,建议here 是永远不要导出数据。你能对此发表评论吗?
    【解决方案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
    

    【讨论】:

    • 我没有收到任何注意...您的包在说明文件中的“导入”下?
    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多