构建 R 包小插图时出错。 if (idx > 0) sprintf("default-%s.tex) else "default.tex" 出错:缺少需要 TRUE/FALSE 的值

Error building R package vignette. Error in if (idx > 0) sprintf("default-%s.tex) else "default.tex" : missing value where TRUE/FALSE needed

我正在构建一个 R 包。

==> devtools::document(roclets = c('rd', 'collate', 'namespace', 'vignette'))

Updating package documentation
Writing NAMESPACE
Loading package
.
.
.
Writing NAMESPACE
Updating vignettes
Rebuilding projectR.Rmd

在此之后我得到以下错误

Error in if (idx > 0) sprintf("default-%s.tex", template_versions[idx]) else "default.tex" : 
  missing value where TRUE/FALSE needed
Calls: suppressPackageStartupMessages ... create_output_format -> do.call -> <Anonymous> -> create_latex_template
Execution halted

Exited with status 1.

我不确定是什么导致了错误。我想因为它调用了 roxygen2::roxygenize,它可能源自那里,但包中不包含此错误消息。有人可以指导我解决这个问题吗?

您从旧版本 BiocStyle 中的错误中得到此错误。作为您所拥有版本中小插图处理的一部分,以下行是 运行:

idx <- match(TRUE, version >= template_versions)

但是,如果version >= template_versions returns NA,那么idx也会是NA。然后 if (idx > 0) 检查抛出你得到的错误。

您可以看到他们修复此错误的提交 here,方法是将上面的行更改为

idx <- match(TRUE, version >= template_versions, nomatch = 0)

因此,您需要2.13.1 或更高版本才能避免此错误。一种方法是从 GitHub:

安装
library(devtools)
install_github("Bioconductor/BiocStyle")