R CMD构建。失败:“参数长度为零”

时间:2018-12-02 08:25:13

标签: r r-package

我的包裹上的

onDrawerClosed失败,并显示以下无用的输出:

R CMD build .

RStudio还提供了无用的输出:

  

错误:构建目录不包含DESCRIPTION   文件,因此无法将其构建为包。

     

构建目录:〜/ myPackage

* checking for file ‘./DESCRIPTION’ ... OK * preparing ‘myPackage’: * checking DESCRIPTION meta-information ... OK * cleaning src * checking for LF line-endings in source and make files and shell scripts * checking for empty or unneeded directories Error in if (dep$op != ">=") next : argument is of length zero Execution halted 文件显然存在)

这是我的DESCRIPTION文件:

DESCRIPTION

我的包裹结构有什么问题?

1 个答案:

答案 0 :(得分:3)

Depends: R 必须具有R版本依赖性:

Depends: R (>= 3.0.0)

(或任何适当的方法)

这在Writing R Extensions中说明:

  

在没有版本说明或包base的情况下声明对R的依赖是没有意义的:这是R包,并且包base始终可用。

因此,我也可以删除此行(如果我的程序包没有其他依赖项)。

由此,构建立即完成。

虽然事后回顾很清楚,但也许找出问题所在的路径也可以说明(由于此特定错误消息没有给我任何搜索结果):

  

if(dep $ op!=“> =”)next时出错:参数长度为零

某些情况下看起来确实很像R代码-显然dep$op(无论是什么)由于某种原因而丢失/未声明。尚不清楚正在执行什么代码/什么函数正在产生此错误。

但是,无论代码是什么,都必须在the R source内部,因此我们可以:

  1. 尝试在GitHub的存储库中搜索消息(由于通常会从网络搜索中删除各种定界符/其他字符,因此很难匹配)
  2. 克隆存储库并在源代码中使用grep(等)(更灵活,但是如果您还没有完整的R源,则需要下载完整的R源)

今天,我很幸运地得到了两个文件中的hit on GitHub for "if (dep$op != ">=") next"src/library/tools/R/build.R好像在鼻子上。

以下是该代码段所在的区域:

ixup_R_dep <- function(pkgname, ver = "2.10")
    {
        desc <- .read_description(file.path(pkgname, "DESCRIPTION"))
        Rdeps <- .split_description(desc)$Rdepends2
        for(dep in Rdeps) {
            if(dep$op != '>=') next
            if(dep$version >= package_version(ver)) return()
        }

它位于tools包中,因此可以使用例如tools:::.read_description

有了这个,很容易发现Rdeps正在捕获Depends: R的{​​{1}}部分,并且它也希望找到一个版本标签。 DESCRIPTION是应用于dep$op端点的op生成器。