19

作成したいくつかの関数とスクリプトを使用してパッケージを作成しようとしました (Mac で X11 を使用)。R CMD チェックの作業中に、次のような問題が発生しました。

temp = trim(unlist(strsplit(lp.add(ranefterms[[i]]), 
+                     "\+")))
Error: '\+' is an unrecognized escape in character string starting "\+"

ただし、最も奇妙なことは、私の関数には実際には「\ +」がないことです。代わりに、"\ \ +" が含まれます (以下を参照)。なので「\\+」が「\+」と認識される理由がわかりません。

for(i in 1:n)
   temp = trim(unlist(strsplit(lp.add(ranefterms[[i]]), '\\+')))

もう少し掘り下げるために、Rcheck フォルダー内の packageName-Ex.R ファイルを調べました。結局のところ、すべての「\ \」はチェック プロセスで「\」に変更されています (たとえば、strsplit() や grepl() などの関数に必要な二重スラッシュ)。

何が原因だったのだろうと思います。再現可能な例を思い付くことができず申し訳ありません...

4

1 に答える 1

19

問題のあるコードは、ヘルプ ファイルの 1 つのサンプル セクションからのものです (これがpackageName-Ex.R. *.Rdこれを修正するには、ドキュメンテーション ファイルのサンプル セクションにある各バックスラッシュを2 つ目のバックスラッシュでエスケープします。(したがって、入力して処理済みのヘルプ ファイルを取得し、入力\\して get します。)\\\\\\\

エスケープされていない限り、\セクショニング マクロとマークアップ マクロを識別する特殊文字として解釈されます (つまり\author\description、 、\bold、 などのコマンド\ldots)。Duncan Murdoch のParsing Rd ファイル(このトピックの公式マニュアル) からの引用:

バックスラッシュ \ はエスケープ文字として使用されます: \、\%、{ および } は、2 番目の文字の特別な意味を取り除きます。

これが実際にどのように見えるかの例として、ここに の一部があります。これは、または$R_SOURCE_HOME/src/library/base/man/grep.Rdを入力したときに表示されるヘルプ ファイルを作成するために処理されます。?grep?gsub

## capitalizing
txt <- "a test of capitalizing"
gsub("(\\\\w)(\\\\w*)", "\\\\U\\\\1\\\\L\\\\2", txt, perl=TRUE)
gsub("\\\\b(\\\\w)",    "\\\\U\\\\1",       txt, perl=TRUE)

処理されたヘルプ ファイルでは、次のようになります。

 ## capitalizing
 txt <- "a test of capitalizing"
 gsub("(\\w)(\\w*)", "\\U\\1\\L\\2", txt, perl=TRUE)
 gsub("\\b(\\w)",    "\\U\\1",       txt, perl=TRUE)
于 2012-05-15T17:27:16.873 に答える