首页 > 解决方案 > 如何在包中使依赖项成为可选

问题描述

我正在用 R 编写一个包,除其他外,它可以用 rgl 显示图。然而,我和我的学生发现 rgl 很麻烦:尤其是那些使用 Mac 的人。我最终花了很多时间帮助他们安装 RGL。

是否有一种适当的、CRAN 认可的方式来使包可选地依赖于 rgl?如果无法加载rgl,某些函数会发送警告消息并优雅退出?我应该如何做到最好?

编辑:我知道如何在函数中实际执行它;但是,我不知道如何在包要求中正式定义它,以便 (i) CRAN 不会抱怨,但 (ii) rgl 被正式指定为可选依赖项。

标签: rdependenciespackage

解决方案


在使用requireNamespace的函数的定义中使用rgl

functionWithRgl<-function(...) {
   if (!requireNamespace("rgl", quietly = TRUE)) {
        warning("The rgl package must be installed to use this functionality")
        #Either exit or do something without rgl
        return(NULL)
    }
    #do stuff with rgl here prefixing it
    rgl::someRglFunction(someArguments)
    #...
}

这样你就不需要在你的包rglDependsorImport部分中声明了。Description


推荐阅读