[R-es] "\." vs "\\."

Carlos J. Gil Bellosta cgb en datanalytics.com
Vie Mar 5 20:40:01 CET 2010


Hola, ¿qué tal?

"\" es un caracter especial, el "escape". No significa nada por sí sino 
que da sentido especial al caracter que lo sigue.

De hecho, para escribir una barra de izquierda a derecha tienes que 
escribir "\\".

En ciertos ámbitos, "." también es un caracter especial que significa 
"cualquier caracter". Por eso strsplit parte por "todos los caracteres":

 > strsplit("a.c",".")
[[1]]
[1] "" "" ""

Si quieres partir por "." tienes que pasar el caracter "normal" ".", que 
se representa como "\.". Pero para pasar "\." a R tienes que escribir 
"\\." previamente.

 > strsplit("a.d","\\.")
[[1]]
[1] "a" "d"

Cuando escribes "\\.", R "lee" "\." y strsplit entiende que quieres usar 
"." como caracter en sí y no como almohadilla para representar 
"cualquier caracter".

Si tienes un camino en Windows (que usa la desafortunada barra "\" para 
separar los directorios) a un en UNIX, tienes que hacer algo así como

 > gsub( "\\\\", "/", camino.de.windows )
[1] "uno/dos"

En ese caso, al escribir "\\\\", R lee "\\", que es, como se ha indicado 
arriba, la barra inclinada (de izda. a dcha.).

Es un lío pero es lo que hay.

En cuanto a trsplit("a.d","\."), imagino que R no entiende muy bien de 
qué se trata, ignora la barra, lanza un "warning" y usa "." en el 
sentido de almohadilla.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com




David A.C. wrote:
> Hola a tod en s,
> 
> ¿alguien me podría clarificar la diferencia entre "\." y "\\." en el siguiente caso? (He mirado ?regex, ?cat, ?Quotes y FAQ 7.37 y no lo acabo de ver)
> 
>> a<-"hola.me.llamo.pepe"
>> a
> [1] "hola.me.llamo.pepe"
>> strsplit(a,"\.")
> [[1]]
>  [1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
> 
> Warning messages:
> 1: '\.' is an unrecognized escape in a character string 
> 2: unrecognized escape removed from "\." 
>> strsplit(a,"\\.")
> [[1]]
> [1] "hola"  "me"    "llamo" "pepe"
> 
> En el primer caso ("\."), sólo me da comillas y un warning;
> En el segundo caso ("\\."), hace lo correcto.
> 
> ¿Pero el "escape character" no es una única contrabarra ("\")? ¿Por qué con el punto se han de poner dos ("\\")? ¿Ocurre esto mismo con otros carácteres?
> 
> Muchas gracias por todo,
> 
> David.
>  		 	   		  
> _________________________________________________________________
> [[elided Hotmail spam]]
> 
> 	[[alternative HTML version deleted]]
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es