Как избежать обратных косых черт в строке 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" 

Ответ 1

[...] Если я хочу получить строку, содержащую 5 \, должен ли я писать 10 \ [...]

Да, вам нужно. Чтобы написать одиночный \ в строке, вы пишете его как "\\".

Это связано с тем, что \ является специальным символом, зарезервированным для выхода из последующего символа. (Возможно, вы признаете \n как новую строку.) Это также полезно, если вы хотите написать строку, содержащую один ". Вы пишете его как "\"".

Причина, по которой \\\str является недопустимой, заключается в том, что она интерпретируется как \\ (что соответствует одному \), за которым следует \s, что недопустимо, поскольку "escape-код s" не имеет значение.

Ответ 2

Прочитайте этот раздел о символьных векторах.

В сущности, в нем говорится, что при вводе символьных строковых литералов вы вставляете их в пару кавычек ( "или" ). Внутри этих кавычек вы можете создавать специальные символы с помощью\в качестве escape-символа.

Например,\n обозначает новую строку или\ "может использоваться для ввода" без R, считая это концом строки. Так как\является escape-символом, вам нужен способ ввода фактического. Это делается с помощью \\. Побег из побега!

Ответ 3

Обратите внимание, что удвоение обратных косых черт связано с тем, что вы вводите строку в командной строке, а строка сначала анализируется парсером R. Вы можете вводить строки по-разному, некоторые из которых не нуждаются в удвоении. Например:

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