首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R CMD构建失败:“参数长度为零”

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

Stack Overflow用户
提问于 2018-12-02 08:25:13
回答 1查看 831关注 0票数 1

我的包上的R CMD build .失败了,有以下无用的输出:

代码语言:javascript
复制
* 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

RStudio还提供了无用的输出:

错误:生成目录不包含描述文件,因此不能作为包构建。 构建目录:~/myPackage

( DESCRIPTION文件显然存在)

这是我的DESCRIPTION文件:

代码语言:javascript
复制
Package: myPackage
Version: 0.1.0
Title: This is my package
Author: Michael Chirico
Maintainer: Michael Chirico <my_email@gmail.com>
Depends: R
Description: My package is great!
Imports: Rcpp (>= 1.0.0)
LinkingTo: Rcpp

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-02 08:26:25

2020年更新-04-27

在当前的svn修订版(78311)中,这个问题已经过时--如果没有给出>=,那么内部函数tools:::.split_description就会简单地删除R依赖项。

这是错误报告的结果:

bug.cgi?id=17768

与R版本4.0.0及更早版本相关

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

代码语言:javascript
复制
Depends: R (>= 3.0.0)

(或任何适当的)

这在写R扩展中有说明。

在没有版本规范的情况下声明对R的依赖是没有意义的,也没有对包base的依赖:这是一个R包,包base总是可用的。

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

这样,构建就会立即完成。

虽然回想起来这一点很清楚,但也许找出问题所在的路径也可以说明问题(因为这条错误信息没有给我任何搜索结果):

if (dep$op != ">=")中的错误:参数长度为零

显然,由于某种原因,dep$op (不管是什么)丢失了/没有声明。不清楚的是执行的是什么代码/什么函数产生了这个错误。

但是,无论是什么代码,都必须在R源中,所以我们可以:

  1. 尝试一下GitHub在存储库中搜索消息的方法(由于不同的分隔符/其他字符通常从web搜索中删除),这可能很难匹配。
  2. 克隆回购并在源代码中使用grep (等)(更灵活,但如果您还没有完整的R源代码,则需要下载它)

今天,我很幸运地在两个文件中获得了一个"if (dep$op != ">=") next"src/library/tools/R/build.R看起来就像在鼻子上。

以下是找到该片段的区域:

代码语言:javascript
复制
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正在捕获DESCRIPTIONDepends: R部分,并且也希望找到一个版本标记;dep$op是应用于dep端点的operator。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53578625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档