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

时间:2017-05-04 02:53:29

标签: r r-package

问题

我正在尝试将非CRAN repo中的函数导入到我的包中。 我知道R在CRAN中搜索Imports:文件的DESCRIPTION字段中声明的任何包。有没有办法,例如,从包'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(),将所有包的函数抛入用户的命名空间,这绝不是理想的。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:3)

一个超级简单的技巧是在我们的spino = dialog.findViewById(R.id.language_spinner); if (spino != null) { spino.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String item_position = String.valueOf(position); int itemposition = Integer.parseInt(item_position); String selected = String.valueOf(spino.getAdapter().getItem(position)); Log.e("selected position",""+itemposition); Log.e("selected Text",selected); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } else{ Log.e("Selected item :","NULL:"); } 文件中添加一个'remotes'字段,以指定Github上目标软件包的用户名/ package_name目标。

DESCRIPTION

这不仅对github(Remotes: github::User/PackageNotOnCRAN Import: PackageNotOnCRAN Suggests: devtools, testthat )上的文件非常有效,而且对git,bitbucket,本地包等有效。

More informationhow I figured it out