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)
}
...
}
出于原则,我不喜欢这个想法,因为您在某种程度上未经用户同意从可能不受监管(理论上危险)的来源安装了 a/several 软件包。这也在一定程度上降低了函数的可读性,将函数与管理业务进行了权衡。最后,这种方法最终会需要 运行 require()
或 library()
,将包的所有功能都扔到用户的命名空间中,这绝不是理想的。
感谢您对此提供的任何帮助。
一个超级简单的技巧是在我们的 DESCRIPTION
文件中添加一个“远程”字段,指定 Github.
上目标包的 username/package_name 目标
Remotes:
github::User/PackageNotOnCRAN
Import:
PackageNotOnCRAN
Suggests:
devtools,
testthat
这不仅适用于 github (github::
) 上的文件,而且适用于 git、bitbucket、本地包等。
问题
我正在尝试将一个函数从非 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)
}
...
}
出于原则,我不喜欢这个想法,因为您在某种程度上未经用户同意从可能不受监管(理论上危险)的来源安装了 a/several 软件包。这也在一定程度上降低了函数的可读性,将函数与管理业务进行了权衡。最后,这种方法最终会需要 运行 require()
或 library()
,将包的所有功能都扔到用户的命名空间中,这绝不是理想的。
感谢您对此提供的任何帮助。
一个超级简单的技巧是在我们的 DESCRIPTION
文件中添加一个“远程”字段,指定 Github.
Remotes:
github::User/PackageNotOnCRAN
Import:
PackageNotOnCRAN
Suggests:
devtools,
testthat
这不仅适用于 github (github::
) 上的文件,而且适用于 git、bitbucket、本地包等。