19

我尝试使用我创建的一些函数和脚本(在 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() 等函数需要的双斜杠)

我想知道可能是什么原因造成的。抱歉,我无法想出一个可重现的例子......

4

1 回答 1

19

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

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

反斜杠 \ 用作转义字符:\、\%、{ 和} 删除第二个字符的特殊含义。

作为实际情况的示例,这里是 的一部分,它被处理以创建您在键入或$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)
于 2012-05-15T17:27:16.873 回答