[R-es] Encoding y (r)Jython.-

Carlos J. Gil Bellosta cgb en datanalytics.com
Mie Dic 14 15:40:32 CET 2011


Efectivamente, no funcionan bien juntas: hay un conflicto de nombres
en un paquete que importan. Una importa rjson y la otra RJSONIO, que
tienen una función que se llama igual.

R y Python se comunican utilizando json. El paquete rjson fue el
primero que apareció en R para utilizar ese formato de datos y no es
particularmente bueno. RJSONIO es sustancialmente mejor.

Podría cambiar rJython para que usase RJSONIO, pero prefiero trabajar
en rPython porque es mucho mejor:

1) No utiliza Java
2) El paquete ocupa muchísimo menos porque rJython incluye Jython y
ocupa, en total, cosa de 7MB.
3) Jython no permite utilizar módulos de Python que utilizan código
desarrollado en C (como, por ejemplo, NumPy).

La única ventaja de rJython con respecto a rPython es que puede
instalarse en Windows. No consigo crear una versión de rPython que
funcione en otra plataforma Windows que no tenga Python instalado
exactamente como en la mía.

Un saludo,

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



El día 14 de diciembre de 2011 04:38, Freddy López
<freddy.vate01 en gmail.com> escribió:
> Gracias, Carlos.
>
> Funcionó de perlas.
>
> Solo observé un detalle (quizá sea obvio, no sé): rJython y rPython no
> funcionan bien juntas, al menos en un sentido.
>
> Ejemplo:
>
> # primero rPython y luego rJython (con error):
>> library(rPython)
> Loading required package: RJSONIO
>> python.call('len',letters)
> [1] 26
>> library(rJython)
> Loading required package: rJava
> Loading required package: rjson
>
> Attaching package: ‘rjson’
>
> The following object(s) are masked from ‘package:RJSONIO’:
>
>     fromJSON, toJSON
>
>> python.call('len',letters)
> Error en toJSON(foo.args[which.dict], collapse = " ") :
>   el argumento(s) no fue utilizado(s) (collapse = " ")
>
>
> Por otro lado:
>
> # primero rJython y luego rPython (sin error)
>> library(rJython)
> Loading required package: rJava
> Loading required package: rjson
>> rJython<-rJython()
>> jython.call(rJython,'len',letters)
> [1] 26
>> library(rPython)
> Loading required package: RJSONIO
>
> Attaching package: ‘RJSONIO’
>
> The following object(s) are masked from ‘package:rjson’:
>
>     fromJSON, toJSON
>
>> python.call('len',letters)
> [1] 26
>> jython.call(rJython,'len',letters)
> [1] 26
>
> ¡Muchas gracias!
>
> ¡Salud!
>
>
> 2011/12/12 Carlos J. Gil Bellosta <cgb en datanalytics.com>
>
>> Hola, ¿qué tal?
>>
>> Usando rPython, funciona:
>>
>> > library( rPython )
>> Loading required package: RJSONIO
>> > python.exec( "trans_table = ''.join( [chr(i) for i in range(128)] +
>> > ['?'] * 128 )" )
>> > python.get( "trans_table" )
>> [1] ""
>> > python.exec( "def ascii(s):
>> +     if isinstance(s, unicode):
>> +         return s.encode('ascii', 'replace')
>> +     else:
>> +         return s.translate(trans_table)" )
>> >
>> > python.call( "ascii", "señoría" )
>> [1] "se?or?a"
>>
>> Si estás en Linux, puedes instalarlo como se indica en
>>
>>
>> http://www.datanalytics.com/blog/2011/05/24/se-buscan-alpha-testers-para-rpython/
>>
>> El problema con rJython es que usa otro mecanismo de conexión con Python:
>>
>> > ?jython.assign
>> >      rJython <- rJython()
>> > jython.assign( rJython, "a", "ñ" )
>> Error in jython.exec(rJython, jython.command) :
>>  'utf-8' codec can't decode byte 0xf1 in position 0: unexpected end of
>> data
>>
>> que parece que se lleva mal con los encodings.
>>
>> Usa rPython. Trataré de arreglar el otro, aunque me gustaría poder
>> reemplazarlo.
>>
>> Un saludo,
>>
>> Carlos J. Gil Bellosta
>> http://www.datanalytics.com
>>
>>
>> El día 11 de diciembre de 2011 15:05, Freddy López
>> <freddy.vate01 en gmail.com> escribió:
>> > Hola don Carlos,
>> >
>> > Estoy sobre linux mint 11 (Platform: x86_64-pc-linux-gnu (64-bit)), R
>> > version 2.14.0, rJython versión: 0.0-2, y Jython 2.5.2,
>> > (Release_2_5_2:7206,
>> > OpenJDK 64-Bit Server VM (Sun Microsystems Inc.) on java1.6.0_22).
>> >
>> > Si dejé pasar alguna información, por favor no dude en hacérmelo saber.
>> >
>> > ¡Salud!
>> >
>> > 2011/12/11 Carlos J. Gil Bellosta <cgb en datanalytics.com>
>> >
>> >> Hola, ¿qué tal?
>> >>
>> >> Lo voy a mirar. ¿En qué plataforma estás trabajando?
>> >>
>> >> Un saludo,
>> >>
>> >> Carlos J. Gil Bellosta
>> >> http://www.datanalytics.com
>> >>
>> >>
>> >> El día 11 de diciembre de 2011 08:14, Freddy López
>> >> <freddy.vate01 en gmail.com> escribió:
>> >> > Hola,
>> >> >
>> >> > Tengo un problemillo con el encoding de unas palabras y trabajarlas
>> >> > en R
>> >> > por medio de rJython.
>> >> >
>> >> > Os explico: cuando quiero utilizar cualquier dato que contenga
>> >> > acentos o
>> >> > eñes o cualquiera de estos caracteres que no usan los angloparlantes
>> >> > obtengo un error. Ejemplo, en R:
>> >> >
>> >> >> jython.call(rJython,'ascii','señoría')
>> >> > Error en jython.exec(rJython, jython.command) :
>> >> >  'utf-8' codec can't decode bytes in position 2-5: invalid data
>> >> >
>> >> > donde la función ascii es tal cual está definida en este enlace:
>> >> >
>> >> >
>> >> > http://stackoverflow.com/questions/1342000/how-to-replace-non-ascii-characters-in-string
>> >> > .
>> >> >
>> >> > Pero si trabajo directamente en Jython (o python) obtengo:
>> >> >
>> >> >>>> ascii('señoría')
>> >> > 'se??or??a'
>> >> >
>> >> > que es lo que realmente espero.
>> >> >
>> >> > He probado infructuosamente cambiar el encoding de las palabra
>> >> > (dentro
>> >> > de
>> >> > R) con iconv() y no he tenido buen resultado.
>> >> >
>> >> > ¿Alguien habrá tenido alguna experiencia semejante o conocerá la
>> >> > solución?
>> >> >
>> >> > Gracias.
>> >> >
>> >> > --
>> >> > «But Gwindor answered: 'The doom lies in yourself, not in your
>> >> > name.'»
>> >> >
>> >> > JRR Tolkien
>> >> >
>> >> >        [[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
>> >> >
>> >
>> >
>> >
>> >
>> > --
>> > «But Gwindor answered: 'The doom lies in yourself, not in your name.'»
>> >
>> > JRR Tolkien
>> >
>
>
>
>
> --
> «But Gwindor answered: 'The doom lies in yourself, not in your name.'»
>
> JRR Tolkien
>



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