Mic*_*ico 9 r package-development
我正在编写一个我一直使用的函数包,其中一个基本上是一个简短的包装器setdiff:
"%\\%" <- function(A, B) setdiff(A, B)
Run Code Online (Sandbox Code Playgroud)
所以1:6 %\% 4:6 == 1:3.
记录这似乎是一场斗争.以下是我的my_package-infix.Rd文件的相关部分,它们引发了一些问题:
\alias{\%\\\%}
\usage{A \%\\\% B}
Run Code Online (Sandbox Code Playgroud)
当我跑步时,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>%’
Run Code Online (Sandbox Code Playgroud)
可能这意味着我需要更多的逃避,我试图调整这些线:
\alias{\%\\\\\%}
\usage{A \%\\\\\% B}
Run Code Online (Sandbox Code Playgroud)
但令人沮丧的警告是:
* 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':
‘%\\%’
Run Code Online (Sandbox Code Playgroud)
所以现在我们已经从一个未转义的反斜杠变成了两个反斜杠.有些东西没有加起来......是什么给出的?.Rd解析手册(2.2.1)的相关部分没有提供太多帮助:
反斜杠\用作转义字符:\\,\%,\ {和\}删除第二个字符的特殊含义.解析器将删除初始反斜杠,并将另一个字符作为文本的一部分返回.反斜杠也用作标记宏的初始字符.在类似R或类似LaTeX的上下文中,反斜杠后跟一个字母字符开始一个宏; 宏名称一直持续到第一个非字母数字字符.如果无法识别名称,解析器将从末尾删除所有数字,然后再次尝试.如果仍然无法识别,则将其作为UNKNOWN标记返回.允许使用反斜杠的所有其他用法,并由解析器作为文本传递.
它似乎编译得很好 - R CMD build并且R CMD INSTALL没有错误,当我library(my_package),我可以运行?"%\\%"以拉出正确的手册页,我A %\% B正在按照预期使用(当我只使用单个转义alias和时usage).
我见过其他一些人在努力解决这个问题,但没有解决方案,例如这里 和这里,后者由knitr其他软件包的开发人员Yihui Xie .
(PS它甚至没有build中间的偶数反斜杠,因为这意味着百分号没有被转义并被%解释为.Rd文件中的注释字符)
编辑:我已经更接近破解坚果(似乎).
查看解析器手册(第5-7页)的表1-3 ,我们可以看到发送到的文本以usage"R-like"方式alias解释,而to 被解释为"逐字".我不确定这意味着什么(尽管第8-9页的描述),但R CMD check如果我使用的话,我会得到更少的讽刺:
\alias{\%\\\%}
\usage{A \%\\% B}
Run Code Online (Sandbox Code Playgroud)
现在只有一个警告:
* checking Rd \usage sections ... WARNING
Bad \usage lines found in documentation object 'funchir-infix':
A %<unescaped bksl>
Run Code Online (Sandbox Code Playgroud)
最后想出了一个解决方法.基本上是一堆废话 - 我仍然认为这是一个错误.但是这里:
在包中添加一堆无用的代码.因为我收到了这些警告:
检查代码/文档不匹配...警告在文档对象'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 ?\"%\\%\"")
}
Run Code Online (Sandbox Code Playgroud)
并将其添加到我的.Rd文件中:
\alias{\%<unescaped bksl>\%}
Run Code Online (Sandbox Code Playgroud)
(保持usage{ A \%\\\% B }原样).
也就是说R CMD check,即使它只是浪费文本,也要提供它所要求的内容.
羊毛充分地拉过R CMD check眼睛,我的包裹现在完全没有警告B-)
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |