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]]