web-dev-qa-db-ja.com

R文字列のバックスラッシュをエスケープする方法

Rを使用してファイルに文字列を書き込んでいます。

> x1="\\str"
> x2="\\\str"
Error: '\s' is an unrecognized escape in character string starting "\\\s"
> x2="\\\\str"
> write(file='test',c(x1,x2))

testという名前のファイルを開くと、次のように表示されます。

\str
\\str

5個のバックスラッシュを含む文字列を取得したい場合、次のように10個のバックスラッシュを記述する必要がありますか?

x="\\\\\\\\\\str" 
14
Fnzh Xx

[...] 5 _\_を含む文字列を取得したい場合、10 _\_ [...]

はい、そうすべきです。文字列に単一の_\_を書き込むには、それを_"\\"_として記述します。

これは、_\_が特殊文字であり、それに続く文字escapeに予約されているためです。 (おそらく、_\n_を改行として認識します。)単一の_"_を含む文字列を記述したい場合にも役立ちます。 _"\""_と記述します。

_\\\str_が無効である理由は、_\\_(単一の_\_に対応)と解釈され、その後に_\s_が続くためです。これは、「エスケープされたs "意味はありません。

19
aioobe

文字ベクトルについて このセクション を読んでください。

つまり、文字列リテラルを入力するときは、それらを一対の引用符( "または ')で囲みます。これらの引用符の内部では、\をエスケープ文字として使用して特殊文字を作成できます。

たとえば、\ nは改行を示し、\ "は、Rが文字列の終わりであると考えずに"を入力するために使用できます。 \はエスケープ文字なので、実際のを入力する方法が必要です。これは、\\を使用して行われます。脱出を逃れる!

8
seancarmody

バックスラッシュが2倍になるのは、コマンドラインで文字列を入力し、その文字列がRパーサーによって最初に解析されるためです。文字列はさまざまな方法で入力できますが、その一部は2倍にする必要がありません。例えば:

> tmp <- scan(what='')
1: \\\\\str
2: 
Read 1 item
> print(tmp)
[1] "\\\\\\\\\\str"
> cat(tmp, '\n')
\\\\\str 
> 
6
Greg Snow