Hola a tod@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]]
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
Buenas tardes David, Muchas gracias por el ejemplo! La diferencia esta documentada en "Extended Regular Expressions" y "Basic Regular Expressions" de ?regex. En cuanto a tu ejemplo, puedes resolverlo de la siguiente manera> a <- "hola.me.llamo.pepe" > strsplit(a, ''.'')[[1]] [1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""> strsplit(a, ''[.]'')[[1]] [1] "hola" "me" "llamo" "pepe"> strsplit(a, ''[.]'')[[1]][1] "hola" "me" "llamo" "pepe" sin preocuparte por "\" o "\\". Ahora, si "ocurre esto mismo con otros carácteres?", la respuesta es si :) Mira las el segundo parrafo de "Basic Regular Expressions" en ?regex. Feliz fin de semana, Jorge Ivan Velez 2010/3/5 David A.C. <>> > Hola a tod@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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]