我使用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文件? 如果被问到太明显的问题,我很抱歉,但是在谷歌推出一段时间后我就迷失了。
历史:http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24
更新:使用roxygen2!
答案 0 :(得分:3)
我也遇到了太多逃脱的问题,并且消失了。我最终改变了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))
}
}
希望有助于而且不会破坏其他任何东西。
答案 1 :(得分:0)
我也遇到过这个问题,即我有分裂=“\ +”和split =“\ |”各种功能。
.Rd文件实际上也将它们表示为split =“\ +”和split =“\ |”,但随后在R CMD检查中读取的任何.Rd文件将它们转换为split =“+”和split =“\ |“,并导致错误。
如果.Rd文件有split =“\\ +”和split =“\\ |”然后它会被正确读取。
我的解决方案是使用.Rd文件在/ man /目录上运行它,就在R CMD检查之前:
perl -e's /(“\\\ |”)/“\\\\\ |”/ g;' -pi $(找到BioGeoBEARS / man -type f)
perl -e's /(“\\ +”)/“\\\\ +”/ g;' -pi $(找到BioGeoBEARS / man -type f)
进行了一些试验和错误,但它确实有效!
干杯! 尼克
答案 2 :(得分:0)
我遇到了同样的问题。我最终用@usage覆盖源代码中的roxygen生成的默认用法字段。例如。 R源文件包含
#' @usage sourceall(dir = getwd(), pattern = ".*\\\\.R", ...)
sourceall <- function( dir=getwd(), pattern=".*\\.R", ... )
{
blah blah
}
答案 3 :(得分:0)
我遇到过roxygen2 v6.0.1的类似问题。
# this caused errors in R CMD check (non-ASCII chars)
f <- function(x, y, chr = "\u279B")
# this was ok
f <- function(x, y, chr = intToUtf8(0x279B))
在你的情况下,使用换行符,它也应该有效:
lineCount <- function(text, sep = intToUtf8(10))
答案 4 :(得分:-1)
好吧,告诉我,评论框会逃避反斜杠字符!我拒绝添加疯狂并添加反斜杠来逃避perl代码中的黑色斜杠,这些代码逃脱了.Rd文件中的反斜杠,这些文件逃避了R中的反斜杠。
只需加倍所有反斜杠。
或嗯代码标签:
perl -e 's/("\\\\\|")/"\\\\\\\\\|"/g;' -pi $(find BioGeoBEARS/man -type f)
perl -e 's/("\\\\\+")/"\\\\\\\\\+"/g;' -pi $(find BioGeoBEARS/man -type f)
是的,这很好。