Kostya
Kostya

Reputation: 1572

How to replace a symbol by a backslash in R?

Could you help me to replace a char by a backslash in R? My trial:

gsub("D","\\","1D2")

Thanks in advance

Upvotes: 4

Views: 1699

Answers (3)

Ujjwal
Ujjwal

Reputation: 3158

When inputting backslashes from the keyboard, always escape them:

gsub("D","\\\\","1D2")
#[1] "1\\2"

or,

gsub("D","\\","1D2", fixed=TRUE)
#[1] "1\\2"

or,

library(stringr)
str_replace("1D2","D","\\\\")
#[1] "1\\2"

Note: If you want something like "1\2" as output, I'm afraid you can't do that in R (at least in my knowledge). You can use forward slashes in path names to avoid this.

For more information, refer to this issue raised in R help: How to replace double backslash with single backslash in R.

Upvotes: 5

Konrad Rudolph
Konrad Rudolph

Reputation: 545588

You need to re-escape the backslash because it needs to be escaped once as part of a normal R string (hence '\\' instead of '\'), and in addition it’s handled differently by gsub in a replacement pattern, so it needs to be escaped again. The following works:

gsub('D', '\\\\', '1D2')
# "1\\2"

The reason the result looks different from the desired output is that R doesn’t actually print the result, it prints an interpretable R string (note the surrounding quotation marks!). But if you use cat or message it’s printed correctly:

cat(gsub('D', '\\\\', '1D2'), '\n')
# 1\2

Upvotes: 5

Andie2302
Andie2302

Reputation: 4887

gsub("\\p{S}", "\\\\", text, perl=TRUE);

\p{S} ... Match a character from the Unicode category symbol.

Upvotes: 0

Related Questions