我正在编写一个我一直使用的函数包,其中一个基本上是 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 parsing manual(2.2.1)的相关部分没有提供太多帮助:
反斜杠\用作转义字符:\,\%,\ {和}删除第二个字符的特殊含义 . 解析器将删除初始反斜杠,并将另一个字符作为文本的一部分返回 . 反斜杠也用作标记宏的初始字符 . 在类似R或类似LaTeX的上下文中,反斜杠后跟一个字母字符开始一个宏;宏名称一直持续到第一个非字母数字字符 . 如果无法识别名称,解析器将从末尾删除所有数字,然后再次尝试 . 如果仍然无法识别,则将其作为UNKNOWN标记返回 . 允许使用反斜杠的所有其他用法,并由解析器作为文本传递 .
它似乎编译得很好 - R CMD build
和 R CMD INSTALL
没有错误,当我 library(my_package)
时,我可以运行 ?"%\\%"
来拉出正确的手册页,我得到 A %\% B
正在使用中,正如预期的那样(当我只使用一个在 alias
和 usage
中逃脱 .
我见过其他一些人在努力解决这个问题,但没有解决方案,例如here和here,后者由Yihui Xie, knitr
等开发商提供 .
(PS它甚至没有 build
,中间有一个偶数个反斜杠,因为这意味着百分号不会被转义而 %
被解释为 .Rd
文件中的注释字符)
编辑:我已经更接近破解坚果(似乎) .
查看parser manual的表1-3(第5-7页),我们可以看到发送到 usage
的文本以"R-like"方式解释,而 alias
的文本解释为"verbatim" . 我不确定这意味着什么(尽管第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>
1 回答
最后想出了一个解决方法 . 基本上是一堆废话 - 我仍然认为这是一个错误 . 但是这里:
在包中添加一堆无用的代码 . 因为我收到了这些警告:
我将以下内容添加到我的
.R
文件中(主要功能定义旁边,以便清楚地显示所有将通过我的源代码的人):并将其添加到我的
.Rd
文件中:(并按原样保留
usage{ A \%\\\% B }
) .也就是说,给它
R CMD check
它只是浪费文字 .羊毛充分地拉过眼睛,我的包裹现在完全没有警告B-)