我使用Roxygen生成正在开发中的程序包的Rd文件,但默认参数设置为'\n'的函数存在一些问题,例如:

  lineCount <- function(text, sep='\n') {
       ...
   }

目的是计算字符串中的新行('\n')字符。
问题是R CMD检查会给出以下警告:
Codoc mismatches from documentation object 'lineCount':
lineCount
  Code: function(text, sep = "\n")
  Docs: function(text, sep = " ")
  Mismatches in argument default values:
    Name: 'sep' Code: "\n" Docs: " "

在我看来,这个问题是由写入Rd文件引起的(通过cat()写入标准LaTeX文件始终出于某种目的需要将转义字符加倍,例如:\\newline-以我的经验)。
如果在分隔符上加上反斜杠,例如:
  lineCount <- function(text, sep='\\n') {
       ...
   }

问题仍然存在,因为在代码中看起来像'\\n',但是在文档(Rd文件)中看起来像'\n'

我的问题有简单的解决方案吗?可能是Roxygen中的一个额外标签,可以定义如何将函数的参数写入Rd文件?
抱歉,问到的问题太明显了,但是在使用Google一段时间后,我迷路了。

历史:http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24

更新:使用roxygen2!

最佳答案

我还遇到了“太多转义”和\ t消失的问题。我最终更改了roxygen的Rd2.R中的parse.formals函数,如下所示:

  parse.formals <- function(partitum) {
    formals <- partitum$formals
    if (!is.null(formals)) {
      formals <- lapply(formals, trim)
      formals <- lapply(formals, paste, collapse=" ")
      name.defaults <- zip.c(names(formals), formals)
      args <-
        do.call(paste, c(Map(function(name.default) {
          name <- car(name.default)
          default <- cadr(name.default)
          if (! is.character (default)) {  # too much escaped.
                                           # Not sure when escaping is needed.
                                           # param = c ("x", "y", "z") works now
            default <- gsubfn("\"(.*)\"",
                              function(x)
                              sprintf("\"%s\"", gsub("\"", "\\\\\"", x)),
                              as.character(default))
          }
          default <- gsub ("\t", "\\\\t", default) # the tabs and newlines are already
          default <- gsub ("\n", "\\\\n", default) # tab and newline here.
          if (is.null.string(default))
            name
          else
            sprintf('%s=%s', name, default)
        },
                             name.defaults),
                         sep=', '))

      append.Rd(usageTag(parse.function.name(partitum), args))
    }
  }

希望能有所帮助并且不会破坏其他任何东西。

09-12 20:57