Version 5 (modified by 9 years ago) (diff) | ,
---|
TolRInside
Introducción
El paquete TolRInside
de TOL permite la comunicación natural de TOL con R.
Es el paquete equivalente al paquete tolLink de R, pero en el otro sentido de la comunicación. Aunque en principio éstos podrían ser independientes, como veremos, juntos permiten una comunicación bidireccional.
Para poder utilizar TolRInside necesitamos una versión de TOL compatible con R. Para ello disponemos de una variante de TOL compilada con GNU GCC denominada TOL-GNU. Esta versión está disponible en: DownloadTol. Para más detalles sobre la instalación de TOL y R, véase: TOL+R Instalación.
Funciones
El paquete TolRInside
publica un conjunto de funciones al ser requerido, de modo que éstas pasan a ser funciones globales en TOL.
La principal de estas funciones es REval
y de ella derivan otras como: RCall
, RExecute
o RLibrary
.
REval
La función REval
recibe un sólo argumento que corresponde con una expresión de R.
El resultado de su evaluación será exportado a TOL y devuelto como salida de la llamada a REval
si existe el mecanismo de conversión oportuno.
Ejemplos:
// Conjunto de atributos con la versión de R en uso: Set REval("version"); // Texto con la versión de R Text REval("version$version.string"); // Con idéentico resultado podemos ejecutar: Text REval("version")["version.string"]
Errores
Si intentamos obtener un objeto sin conversión en TOL, encontraremos un error. Por ejemplo:
Anything REval("sin"); // > ERROR: [] R class 'function' is not implemented. // Ya que no está implementada la conversión de un objeto de tipo "function" de R a TOL.
Si evaluamos una expresión con errores obtendremos un error sin ninguna otra información que nos ayude a detectarlo:
// > ERROR: [] Exception caught: Error evaluating: ...
Este tipo de mensaje de error, nos indica básicamente que se encontraron errores intentando evaluar la expresión.
Comunicación de variables
Para trasladar una variable de TOL hasta R, podemos hacer uso del paquete tolLink y concretamente de su función tolGet
.
Ejemplos:
// Se carga tolLink en R Set REval("library(tolLink)"); Real a = 1; // Se pide a R que obtenga el valor de a y calcule el seno Real sin_a = REval("sin(tolGet('a'))");
RCall
Nótese, en el ejemplo anterior, que la carga de tolLink devuelve un conjunto que no nos interesa.
Para evitar traer ese resultado u obtener un error en el caso de que la evaluación resulte en un objeto que no puede convertirse podemos acabar nuestra expresión con un número:
Real REval(" library(tolLink) 1 ");
o usar la función RCall
:
Real RCall("library(tolLink)");
RLibrary
Aún más, para la carga de paquetes en R, hay implementada una función específica: RLibrary
. De este modo, simplemente debemos hacer:
Real RLibrary("tolLink");
RExecute
Otro modo de llamar a una función de R y enviar argumentos de TOL es usar RExecute
, análoga a la función tolExecute
de tolLink.
El primer argumento de la función corresponde con el nombre de la función de R. El segundo es un conjunto con la lista de argumentos a pasar a la función.
Ejemplos:
Real b = 1; Real sin_b = RExecute("sin", [[b]]); Real atan_1_2 = RExecute("atan2", [[1, 2]]);
Si queremos pasar a la función un atributo con nombre le antepondremos "__"
al nombre de la variable en TOL.
Ejemplo:
// Para llamar a paste("a", "b", sep="-") debemos hacer: Text RExecute("paste", [["a", "b", Text __sep="-"]]);
Conversión de tipos
Hay mecanismos de conversión para los tipos de objetos correspondientes con los de TOL, véase: Correspondencias de las variables de TOL.
Sin embargo podemos exportar de R otros tipos convirtiéndolos a tipos 'conocidos'.
Ejemplos:
// El objeto USAccDeaths es de clase "ts" (time-serie) Text REval("class(USAccDeaths)"); // -> "ts" // No es de la clase "Serie" equivalente a la gramática "Serie" de TOL // pero puede convertirse con el método as.Serie Serie REval("as.Serie(USAccDeaths)");
Otra información
Véase TOL_R_Integration?.