ロキシゲン:バックスラッシュ ('\') を含むデフォルトパラメータを関数に設定する方法
質問
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 ファイルへの書き込み (標準 LaTeX ファイルへの書き込み) によって引き起こされたように思えます。 cat()
何らかの目的のために常にエスケープ文字を 2 重にする必要があります。例: \\newline
- 私が経験したように)。次のように区切り文字に追加のバックスラッシュを追加すると、次のようになります。
lineCount <- function(text, sep='\\n') {
...
}
コードでは次のようになっているため、問題はまだ残っています '\\n'
, 、しかしドキュメント(Rdファイル)では次のようになります '\n'
.
私の問題に対する簡単な解決策はありますか?関数のパラメータを Rd ファイルに書き込む方法を定義できる Roxygen の追加のタグかもしれません?あまりにも明白な質問だったら申し訳ありませんが、しばらくグーグル検索した後、迷ってしまいました。
歴史: http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24
アップデート:使用 ロキシゲン2!
解決
私は、あまりにも多くのエスケープ "と\ 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))
}
}
に役立ち、何かを破壊しない希望ます。
他のヒント
私は、この問題に出くわしたすなわち、私は「+ \」=スプリットを持っていたし、分割=様々な機能インチ
「\ |」.Rdが実際にも= =「\ +」とのスプリットスプリットとしてこれらを表すファイルが、その後R CMDチェックに.Rdファイルを読み込み、どんな "= =「+」とスプリットスプリットにそれらを回した\ |」、およびエラーの原因となりました。
.Rdファイルが分割を持っていた場合= "\\ +" とスプリット= "\\ |"それは、正しく読みになるだろう。
私のソリューションは、単にR CMDチェックする前に、.Rdファイルと/男/ディレクトリでこれを実行することでした。
perlの-eさん/( "\\\ |")/ "\\\\\ |" /グラム; ' -pi $(BioGeoBEARS /男性型Fを見つける。)
のperl -e 'S /( "\\ +")/ "\\\\ +" / G;' -pi $(BioGeoBEARS /男性型Fを見つける。)
は試行錯誤のビットを取ったが、それは動作します!
乾杯! ニック
私は同じ問題を抱えていました。私は終わったアップ@usageとソースコードからroxygenによって生成されたデフォルトの使用フィールドをオーバーライド。例えば。 Rのソースファイルが含まれている
#' @usage sourceall(dir = getwd(), pattern = ".*\\\\.R", ...)
sourceall <- function( dir=getwd(), pattern=".*\\.R", ... )
{
blah blah
}
私は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))
まあ、私をfrack、コメントボックスには、バックスラッシュ文字をエスケープ!私は狂気に追加して、Rでバックラッシュをエスケープ.Rdファイルにバックスラッシュをエスケープperlのコードでblackslashesを逃れるためにバックスラッシュを追加することを拒否します。
ただ、すべてのバックスラッシュを二重ます。
またはうーんコードタグ:
perl -e 's/("\\\\\|")/"\\\\\\\\\|"/g;' -pi $(find BioGeoBEARS/man -type f)
perl -e 's/("\\\\\+")/"\\\\\\\\\+"/g;' -pi $(find BioGeoBEARS/man -type f)
うんそれは良いことだ。