错误 ['\+' 是在创建 R 包时以“\+”开头的字符串中无法识别的转义

Posted

技术标签:

【中文标题】错误 [\'\\+\' 是在创建 R 包时以“\\+”开头的字符串中无法识别的转义【英文标题】:An error ['\+' is an unrecognized escape in character string starting "\+" while creating a R package错误 ['\+' 是在创建 R 包时以“\+”开头的字符串中无法识别的转义 【发布时间】:2012-05-23 05:53:01 【问题描述】:

我尝试使用我创建的一些函数和脚本创建一个包(在 Mac 上使用 X11)。 R CMD check 在做它的工作时,遇到了如下问题:

temp = trim(unlist(strsplit(lp.add(ranefterms[[i]]), 
+                     "\+")))
Error: '\+' is an unrecognized escape in character string starting "\+"

然而,最奇怪的是我的函数实际上没有“\ +”。相反,它有“\ \ +”(见下文)。所以不知道为什么“\ \ +”被识别为“\ +”。

for(i in 1:n)
   temp = trim(unlist(strsplit(lp.add(ranefterms[[i]]), '\\+')))

为了进一步挖掘,我查看了 Rcheck 文件夹中的 packageName-Ex.R 文件。事实证明,在检查过程中,所有的“\ \”都已更改为“\”(例如,strsplit() 和 grepl() 等函数需要的双斜杠)

我想知道这可能是什么原因。抱歉,我想不出一个可重现的例子……

【问题讨论】:

【参考方案1】:

有问题的代码来自您的一个帮助文件的示例部分(这就是它最终出现在packageName-Ex.R 中的原因)。要修复它,只需使用第二个反斜杠转义 *.Rd 文档文件的示例部分中的每个反斜杠。 (所以,在处理后的帮助文件中输入\\得到\,输入\\\\得到\\。)

除非它被转义,否则\ 被解释为标识分段和标记宏的特殊字符(即像\author\description\bold\ldots 这样的命令)。引用 Duncan Murdoch 的Parsing Rd files(本主题官方手册):

反斜杠\用作转义字符:\、\%、和 去掉第二个字符的特殊含义。

作为实际情况的示例,这里是$R_SOURCE_HOME/src/library/base/man/grep.Rd 的一部分,它被处理以创建您在键入?grep?gsub 时看到的帮助文件。

## capitalizing
txt <- "a test of capitalizing"
gsub("(\\\\w)(\\\\w*)", "\\\\U\\\\1\\\\L\\\\2", txt, perl=TRUE)
gsub("\\\\b(\\\\w)",    "\\\\U\\\\1",       txt, perl=TRUE)

在处理后的帮助文件中,如下所示:

 ## capitalizing
 txt <- "a test of capitalizing"
 gsub("(\\w)(\\w*)", "\\U\\1\\L\\2", txt, perl=TRUE)
 gsub("\\b(\\w)",    "\\U\\1",       txt, perl=TRUE)

【讨论】:

@Josh-obrien 谢谢。帮助文件确实是问题所在。你知道为什么这是一个问题吗?我过去创建了一个包并没有遇到类似的问题 - 我没有将任何“\\”更改为“\\\\”。 @X.He -- 这不是什么新鲜事,所以我敢打赌你之前的包在你的例子中没有\\ 或者任何示例都在 \dontrun 块内,您没有运行 R CMD 检查。请记住,这与任何打包函数中的代码无关。相反,它与处理*.Rd 文件的方式有关。

以上是关于错误 ['\+' 是在创建 R 包时以“\+”开头的字符串中无法识别的转义的主要内容,如果未能解决你的问题,请参考以下文章

Sed如果在添加文件时以“ v”开头,则它会截断第一个字符

获取 PLS-00103:在创建包时遇到符号“/”错误

当我尝试在 R 中安装 Mosaic 包时,这个错误是啥意思?

R 错误:向量的长度错误,使用 Geosphere 包时应为 2

R语言安装包时遇到arch - i386错误时解决方案

使用 R 的 CMA Bioconductor 包时,解决 SVM 分类交叉验证中的“模型空”错误