首页 文章

获取R CMD检查以了解反斜杠

提问于
浏览
8

我正在编写一个我一直使用的函数包,其中一个基本上是 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 buildR CMD INSTALL 没有错误,当我 library(my_package) 时,我可以运行 ?"%\\%" 来拉出正确的手册页,我得到 A %\% B 正在使用中,正如预期的那样(当我只使用一个在 aliasusage 中逃脱 .

我见过其他一些人在努力解决这个问题,但没有解决方案,例如herehere,后者由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 回答

  • 5

    最后想出了一个解决方法 . 基本上是一堆废话 - 我仍然认为这是一个错误 . 但是这里:

    在包中添加一堆无用的代码 . 因为我收到了这些警告:

    检查代码/文档不匹配...警告在文档对象'funchir-infix'中使用但在代码中没有使用的函数或方法:%<unescaped bksl >%checking Rd \ usage sections ... WARNING \ usage in文档对象'funchir-infix'中的\别名:%<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 它只是浪费文字 .

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

相关问题