8

Windows はパスをバックスラッシュでコピーします\が、R はこれを受け入れません。\だから、に変換する関数を書きたかったの/です。例えば:

chartr0 <- function(foo) chartr('\','\\/',foo)

次に、次のように使用chartr0します...

source(chartr0('E:\RStuff\test.r'))

しかし、chartr0機能していません。多分、逃げられない//他の多くの場合、エスケープが重要になる可能性があると思います。

chartr0また、毎回の使用を避けることは可能ですが、Rで環境を作成することにより、すべてのパスを自動的に変換chartr0するか、または使用するような一時的な使用を使用しますoptions

4

4 に答える 4

7

あなたの根本的な問題は、いくつかの小文字、バックスラッシュ自体、引用符、または8進数、16進数、またはUnicodeシーケンスを入力するためのいくつかの規則以外の文字の前に単一のバックスラッシュが表示されるとすぐに、Rがエラー状態を通知することです。これは、インタプリタがバックスラッシュを、文字の通常の変換を「エスケープ」して別のことを行うためのメッセージと見なすためです。文字要素に単一のバックスラッシュが必要な場合は、2 つのバックスラッシュを入力する必要があります。これにより、バックスラッシュが 1 つ作成されます。

nchar("\\")
#[1] 1

_Intro_to_R_ の「文字ベクトル」セクションには、次のように書かれています。

「文字列は、一致する二重引用符 (") または単一引用符 (') のいずれかを使用して入力されますが、二重引用符を使用して (場合によっては引用符なしで) 出力されます。\ をエスケープ文字として使用する C スタイルのエスケープ シーケンスを使用するため、\ は \ として入力および出力され、二重引用符内の " は \" として入力されます。その他の便利なエスケープ シーケンスは、\n、改行、\t、タブ、および \b、バックスペースです。完全なリストについては、?Quotes を参照してください。"

 ?Quotes
于 2013-01-06T19:01:01.250 に答える
3
chartr0 <- function(foo) chartr('\\','/',foo)
chartr0('E:\\RStuff\\test.r')

R は R がエスケープされていると認識しているため、E:\Rxxxx と書くことはできません。

于 2013-01-06T18:32:32.037 に答える
0

問題は、コード内のすべてのスラッシュとバックスラッシュが正しくエスケープされず、無効な文字列または間違った文字列が使用されることです。どの文字をどのようにエスケープする必要があるかを読む必要があります。以下のリンクにあるエスケープ シーケンスのリストを参照してください。そこにリストされていないもの (スラッシュなど) は文字どおりに扱われ、エスケープは必要ありません。

http://cran.r-project.org/doc/manuals/R-lang.html#Literal-constants

于 2013-01-06T18:54:12.673 に答える