我正在编写一个我一直使用的函数包,其中一个基本上是一个简短的包装器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
中只使用一个转义时)。alias
usage
我见过其他一些人为此苦苦挣扎,但没有解决方案,例如here 和here,后者由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>