我使用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))
}
}
希望能有所帮助并且不会破坏其他任何东西。