【问题标题】:How to make a dependency optional in a package如何在包中使依赖项成为可选
【发布时间】:2019-05-06 17:59:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: r dependencies package


    【解决方案1】:

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

    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)
        #...
    }
    

    通过这种方式,您无需在包的DescriptionDependsImport 部分声明rgl

    【讨论】:

    • 我真的可以在没有在DESCRIPTION中指定依赖关系的情况下这样做吗?它会通过检查 --as.cran 吗?
    • @January 您的问题(甚至是您的具体示例)已被 WRE 覆盖:cran.r-project.org/doc/manuals/r-release/…
    • 太好了,谢谢。原来我没看懂。
    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    相关资源
    最近更新 更多