繁体   English   中英

R 包构建:如何从不在 CRAN 上的包中导入函数

[英]R package building: How to import a function from a package not on CRAN

问题

我正在尝试将非 CRAN 存储库中的函数导入到我的包中。 我知道 R 在 CRAN 中搜索在DESCRIPTION文件的Imports:字段中声明的任何包。 例如,有什么方法可以从包“notoncran”中导入function ,该包仅在 Github(或其他非 CRAN 位置)上。

不希望的解决方法:

我已经找到了一个不需要的解决方法,它包括通过将我的函数定义为以下内容来完全绕过Imports:字段:

myfun <- function(a,b){
    x <- require(notoncran)
    if(!x){
        print("installing notoncran because you don't have it...")
        devtools::install_github('repo/withpackage')
        require(notoncran)
    }
    ...
}

原则上我不喜欢这个想法,因为您在未经用户同意的情况下在某种程度上安装了一个/几个包,来自潜在的不受监管(理论上危险)的来源。 这也在一定程度上降低了功能的可读性,因为将功能与管理业务进行了权衡。 最后,这种方法最终需要运行require()library() ,将包的所有函数都扔到用户的命名空间中,这从来都不是理想的。

感谢您对此的任何帮助。

一个超级简单的技巧是在我们的DESCRIPTION文件中添加一个“remotes”字段,指定我们在 Github 上的目标包的 username/package_name 目标。

Remotes:
    github::User/PackageNotOnCRAN
Import:
    PackageNotOnCRAN
Suggests:
    devtools,
    testthat

这不仅适用于 github ( github:: ) 上的文件,而且适用于 git、bitbucket、本地包等。

更多信息我是怎么想出来的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM