ロキシゲン:バックスラッシュ ('\') を含むデフォルトパラメータを関数に設定する方法

StackOverflow https://stackoverflow.com/questions/4616088

  •  26-09-2019
  •  | 
  •  

質問

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)

うんそれは良いことだ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top