11

我正在编写一个我一直使用的函数包,其中一个基本上是一个简短的包装器setdiff

"%\\%" <- function(A, B) setdiff(A, B)

所以1:6 %\% 4:6 == 1:3

记录这似乎是一场斗争。以下是我的my_package-infix.Rd文件中引发问题的相关部分:

\alias{\%\\\%}
\usage{A \%\\\% B}

当我运行时,R CMD check my_package_0.1.0.tar.gz我收到警告:

* checking for code/documentation mismatches ... WARNING
  Functions or methods with usage in documentation object
  'my_package-infix' but not in code: 
  %<unescaped bksl>%

* checking Rd \usage sections ... WARNING
  Objects in \usage without \alias in documentation object
  'my_package-infix': 
  ‘%<unescaped bksl>%’

暗示这可能意味着我需要更多的逃避,我试图调整这些行:

\alias{\%\\\\\%}
\usage{A \%\\\\\% B}

但是产生的令人沮丧的警告是:

* checking for code/documentation mismatches ... WARNING    
  Functions or methods with usage in documentation object
  'my_package-infix' but not in code:
  %\\%

* checking Rd \usage sections ... WARNING
  Objects in \usage without \alias in documentation object
  'my_package-infix':
  ‘%\\%’

所以现在我们已经从一个未转义的反斜杠变成了两个反斜杠。有些东西没有加起来......什么给了?.Rd解析手册(2.2.1)的相关部分没有提供太多帮助:

反斜杠 \ 用作转义字符:\\、\%、\{ 和 \} 删除第二个字符的特殊含义。解析器将删除初始反斜杠,并将另一个字符作为文本的一部分返回。反斜杠也用作标记宏的初始字符。在类似 R 或 LaTeX 的上下文中,反斜杠后跟字母字符开始宏;宏名称一直持续到第一个非字母数字字符。如果无法识别名称,解析器会删除末尾的所有数字,然后重试。如果仍然无法识别,则将其作为 UNKNOWN 令牌返回。反斜杠的所有其他用途都是允许的,并由解析器作为文本传递。

它似乎编译得很好——R CMD build并且R CMD INSTALL没有给出任何错误,当我运行时library(my_package),我可以运行?"%\\%"以调出正确的手册页,我正在使用的地方,正如预期的那样(当我在andA %\% B中只使用一个转义时)。aliasusage

我见过其他一些人为此苦苦挣扎,但没有解决方案,例如herehere,后者由Yihui Xie(knitr其他软件包的开发人员)开发。

(PS 中间甚至没有偶数build个反斜杠,因为这意味着百分号不会被转义并被%解释为.Rd文件中的注释字符)


编辑:我已经更接近于破解坚果(似乎)。

查看解析器手册的表 1-3 (第 5-7 页),我们可以看到发送到的文本以usage“R-like”方式解释,而 toalias被解释为“逐字”。我不确定这到底是什么意思(尽管第 8-9 页有描述),但R CMD check如果我使用以下内容,我会少些刻薄:

\alias{\%\\\%}
\usage{A \%\\% B}

现在只有一个警告:

* checking Rd \usage sections ... WARNING
  Bad \usage lines found in documentation object 'funchir-infix':
  A %<unescaped bksl>
4

1 回答 1

6

终于想出了一个解决方法。基本上是一堆废话——我仍然认为这是一个错误。但这里有:

将一堆无用的代码添加到您的包中。由于我收到这些警告:

  • 检查代码/文档不匹配...警告在文档对象'funchir-infix'中使用但不在代码中使用的函数或方法: %<unescaped bksl\>%

  • 检查 Rd \usage 部分...警告在文档对象“funchir-infix”中没有 \alias 的 \usage 中的对象: %<unescaped bksl>%

具有 \usage 条目的函数需要具有适当的 \alias 条目,并记录其所有参数。\usage 条目必须对应于语法上有效的 R 代码。请参阅“编写 R 扩展”手册中的“编写 R 文档文件”一章。

我在我的.R文件中添加了以下内容(为了让所有将通过我的源代码的人清楚起见,在主函数定义旁边):

"%\\%" <- function(A, B) setdiff(A, B)

"%<unescaped bksl>%" <- function(){
  cat("What are you thinking? Don't use this function. See ?\"%\\%\"")
}

并将其添加到我的.Rd文件中:

\alias{\%<unescaped bksl>\%}

(并保持usage{ A \%\\\% B }原样)。

也就是说,提供R CMD check它所要求的东西,即使它只是浪费文本。

羊毛充分拉过R CMD check眼睛,我的包裹现在完全没有警告 B-)

于 2015-09-25T03:16:05.673 回答