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