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"
[...] 5 _
\
_を含む文字列を取得したい場合、10 _\
_ [...]
はい、そうすべきです。文字列に単一の_\
_を書き込むには、それを_"\\"
_として記述します。
これは、_\
_が特殊文字であり、それに続く文字escapeに予約されているためです。 (おそらく、_\n
_を改行として認識します。)単一の_"
_を含む文字列を記述したい場合にも役立ちます。 _"\""
_と記述します。
_\\\str
_が無効である理由は、_\\
_(単一の_\
_に対応)と解釈され、その後に_\s
_が続くためです。これは、「エスケープされたs
"意味はありません。
文字ベクトルについて このセクション を読んでください。
つまり、文字列リテラルを入力するときは、それらを一対の引用符( "または ')で囲みます。これらの引用符の内部では、\をエスケープ文字として使用して特殊文字を作成できます。
たとえば、\ nは改行を示し、\ "は、Rが文字列の終わりであると考えずに"を入力するために使用できます。 \はエスケープ文字なので、実際のを入力する方法が必要です。これは、\\を使用して行われます。脱出を逃れる!
バックスラッシュが2倍になるのは、コマンドラインで文字列を入力し、その文字列がRパーサーによって最初に解析されるためです。文字列はさまざまな方法で入力できますが、その一部は2倍にする必要がありません。例えば:
> tmp <- scan(what='')
1: \\\\\str
2:
Read 1 item
> print(tmp)
[1] "\\\\\\\\\\str"
> cat(tmp, '\n')
\\\\\str
>