具有可选依赖项的CRAN软件包

时间:2020-09-29 10:07:01

标签: r v8 cran

我构建了一个R包,其某些功能使用V8包。但是在某些平台上不支持V8,因此我想使这些功能仅可用于支持V8的平台。如何处理这种情况?我可以将V8放在Suggests的{​​{1}}字段而不是DESCRIPTION字段中,并测试Imports是否可用,但是我该怎么办?处理必须从requireNamespace导入的功能?我想将此软件包提交给CRAN。

2 个答案:

答案 0 :(得分:1)

我通过复制reactR软件包使用的方式找到了解决方案。

  • V8字段中放入Suggests

  • 请勿在{{1​​}}中导入V8或其功能;使用NAMESPACE来使用V8::...函数。

  • 在需要V8的函数中,使用V8检查是否存在requireNamespace,如果不存在则抛出消息或错误:

    V8

我跑了if(!requireNamespace("V8")){ message("This addin requires the 'V8' package.") return(invisible()) } ,它没有抱怨。

答案 1 :(得分:0)

我认为最干净的解决方案是拥有两个软件包。第一个包(A)将包含不(直接或间接)依赖于V8的所有代码。第二个程序包(B)取决于A,并包含确实需要V8的所有代码。


                              +-------+
                              |       |
                              |  V8   |
                              |       |
                              +---^---+
                                  |
                                  | Requires
                                  |
         +-------+            +---+---+
         |       |            |       |
         |  A    <------------+  B    |
         |       |  Requires  |       |
         +-------+            +-------+

在支持V8的平台上,用户可以使用B,在所有其他平台上,用户可以使用A

打包A可以Suggest打包B