como replace barras invertidas simples em R

Eu tenho uma string que se parece com:

str<-"a\f\r" 

Eu estou tentando remover as barras invertidas, mas nada funciona:

 gsub("\","",str, fixed=TRUE) gsub("\\","",str) gsub("(\)","",str) gsub("([\])","",str) 

… basicamente todas as variações que você pode imaginar. Eu até tentei a function string_replace_all . QUALQUER AJUDA??

Estou usando o R versão 3.1.1; Mac OSX 10.7; o dput para uma única string no meu vetor de strings dá:

 dput(line) "ud83d\ude21\ud83d\udd2b" 

Eu importei o arquivo usando readLines de um arquivo .txt padrão. O conteúdo do arquivo é algo parecido: got an engineer booked for this afternoon \ud83d\udc4d all now hopefully sorted\ud83d\ude0a I m going to go insane ud83d\ude21\ud83d\udd2b in utf8towcs …

Obrigado.

Ao introduzir barras invertidas no teclado, sempre as escapa.

 str <-"this\\is\\my\\string" # note doubled backslashes -> 'this\is\my\string' gsub("\\", "", str, fixed=TRUE) # ditto str2 <- "a\\f\\r" # ditto -> 'a\f\r' gsub("\\", "", str2, fixed=TRUE)# ditto 

Note que se você fizer

 str <- "a\f\r" 

então str não contém barras invertidas. Consiste nos 3 caracteres a , \f (que normalmente não é imprimível, exceto como \f e \r (mesmo).

E apenas para evitar uma possível pergunta. Se seus dados foram lidos de um arquivo, o arquivo não precisa ter barras duplas invertidas. Por exemplo, se você tiver um arquivo test.txt contendo

 a\b\c\d\e\f 

e você faz

 str <- readLines("test.txt") 

então str conterá a string a\b\c\d\e\f como seria de esperar: 6 letras separadas por 5 barras invertidas únicas. Mas você ainda tem que digitar barras invertidas duplas se quiser trabalhar com ele.

 str <- gsub("\\", "", str, fixed=TRUE) # now contains abcdef 

A partir do dput , parece que o que você tem lá é o texto codificado em UTF-16, que provavelmente veio de uma máquina Windows. De acordo com

Ele codifica glifos no Plano Multilingue Suplementar , o que é bastante obscuro. Eu suponho que você precisa fornecer o argumento encoding="UTF-16" para readLines quando você lê no arquivo.

Isso pode ser útil 🙂

 require(stringi) stri_escape_unicode("ala\\ma\\kota") ## [1] "ala\\\\ma\\\\kota" stri_unescape_unicode("ala\\ ma\\ kota") ## [1] "ala ma kota" 

Como não há maneiras diretas de lidar com barras invertidas únicas, aqui está a solução mais próxima para o problema, conforme fornecido por David Arenburg na seção de comentários

 gsub("[^A-Za-z0-9]", "", str) #remove all besides the alphabets & numbers 

Uma solução bastante universal é

 gsub("\\\\", "", str) 

Graças ao comentário acima.

Isso é o mesmo que a resposta aceita, mas reinicia menos (apenas caracteres não-ascii):

 gsub("[^ -~]", '', "a\f\r") ## [1] "a" 

você pode usar str_replace_all (str, “\\” “/”) depois de adicionar mais uma barra invertida como “a \ f \ r”