R – gsub reemplazando las barras invertidas

Me gustaría usar gsub para reemplazar cada aparición de una barra invertida en una cadena con 2 barras diagonales inversas.

Actualmente, lo que he probado es gsub("\\\\", "\\", x) . Sin embargo, esto no parece funcionar. Sin embargo, si cambio la expresión para reemplazar cada barra invertida con “a”, funciona bien.

 > gsub("\\\\", "\\", "\\") [1] "" > gsub("\\\\", "a", "\\") [1] "a" > gsub("\\\\", "\\\\", "\\") [1] "\\" 

El último caracter es solo una barra invertida; R solo imprime 2 porque imprime caracteres escapados con la barra diagonal inversa. El uso de nchar confirma que la longitud es 1.

¿Qué causa esta funcionalidad? El segundo argumento para gsub no es una expresión regular, por lo que tener 4 barras diagonales inversas en el literal de la cadena se debe convertir a un carácter con 2 barras diagonales inversas. Tiene incluso menos sentido que la primera llamada de gsub anterior devuelva una cadena vacía.

Esto es lo que necesitas:

 gsub("\\\\", "\\\\\\\\", "\\") [1] "\\\\" 

La razón por la que necesita cuatro barras diagonales inversas para representar una barra invertida literal es que "\" es un carácter de escape en ambas cadenas R y para el motor de expresiones regulares al que finalmente está pasando sus patrones. Si estuvieras hablando directamente con el motor de expresiones regulares, usarías "\\" para indicar una barra invertida literal. Pero para que R pase "\\" al motor de expresiones regulares, debe escribir "\\\\" .


(Si solo quiere doblar barras diagonales inversas, puede usar esto en su lugar):

 gsub("\\", "\\\\", "\\", fixed=TRUE) [1] "\\\\" 
    Intereting Posts