2012-04-09 9 views
7

caracteres de escape causan muchos problemas en I, como se evidencia por las preguntas anteriores:Eliminar escapes de una cadena, o, "¿cómo puedo obtener fuera del camino?"

  1. Change the values in a column
  2. Can R paste() output "\"?
  3. Replacing escaped double quotes by double quotes in R
  4. How to gsub('%', '\%', ... in R?

Muchas de estas preguntas anteriores puede haber simplificado a casos especiales de "¿Cómo puedo obtener \ fuera de mi camino?"

¿Hay una manera simple de hacer esto?

Por ejemplo, no puedo encontrar ningún argumento a gsub que eliminen todos los escapes de los siguientes:

test <- c('\01', '\\001') 
+0

'\ 0' es la cadena nul. R no ha permitido aquellos en cadenas para algunas versiones. ¿Qué versión de R estás usando? –

+0

@Josh: 2.14. ¿No hay forma de extraer "0" de "\ 0"? –

+0

Para que quede claro: ¿quiere eliminar todas las instancias de "\?" donde "\" se toma literalmente y "?" significa un solo personaje? ¿O solo quieres quitar todas las instancias de "\" excepto cuando es "\\"? Todavía me iría con la construcción de expresiones regulares '[\\] {1,}'. Edit: diablos, incluso el analizador aquí edita los escapes :-( –

Respuesta

8

La dificultad aquí es que "\1", a pesar de que está impreso con dos glifos, es en realidad, en opinión de R un solo personaje. Y de hecho, es el mismo carácter que "\001" y "\01":

nchar("\1") 
# [1] 1 
nchar("\001") 
# [1] 1 
identical("\1", "\001") 
# [1] TRUE 

es así, puede en quitar general, todas las barras invertidas con algo como esto:

(test <- c("\\hi\\", "\n", "\t", "\\1", "\1", "\01", "\001")) 
# [1] "\\hi\\" "\n"  "\t"  "\\1" "\001" "\001" "\001" 
eval(parse(text=gsub("\\", "", deparse(test), fixed=TRUE))) 
# [1] "hi" "n" "t" "1" "001" "001" "001" 

Pero, como se puede ver , "\1", "\01" y \001" se mostrarán como 001, (dado que para R son todos nombres diferentes para "\001").


EDITAR: Para más información sobre el uso de "\" en secuencias de escape, y en la gran variedad de caracteres que se pueden representar mediante ellos (incluyendo la cadena nul anulado mencionado por Joshua Ulrich en un comentario anterior) , ver this section de la definición del lenguaje R.

1

Acabo de enfrentar el mismo problema - si quieres cualquier \ x donde x es un personaje, entonces no estoy seguro de cómo, ojalá lo supiera, pero para arreglarlo para una secuencia de escape específica. dice \ n entonces puede hacer

new = gsub("\n","",old,fixed=T) 

en mi caso, yo sólo tenía \ n

Cuestiones relacionadas