R función escalar lingüística 1
El siguiente ejemplo crea una función que devuelve la longitud total de todas las columnas de entrada de caracteres.
Código
En R AE, el objeto principal que proporciona el usuario es una función que se denomina ' nz.fun. Encapsula el bucle AE principal y utiliza la API AE de R para recibir y enviar datos. El siguiente ejemplo muestra la implementación de ' applyop ' en R.
nz.fun <- function () {
while(getNext()) {
op <- getInputColumn(0)
X <- c()
for (i in seq(1, inputColumnCount()-1)) {
x <- as.numeric(getInputColumn(i))
if (!is.null(x) && !is.na(x))
X <- append(X, x)
}
if (op != '+' && op != '*')
stop('incorrect operator: ', op)
setOutputInt32(0, eval(parse(text=paste(X, collapse=op))))
outputResult()
}
}
El bucle principal termina cuando ' getNext() ' devuelve false, lo que indica que no hay más filas de entrada que procesar. A cada fila de entrada se accede por el ' getInputColumn() ' que devuelve el valor de la columna que se especifica por su índice. El índice de la primera columna es cero, y el índice de la última columna es " inputColumnCount()-1. Los valores de salida son tratados por las funciones ' setOutput* ', donde el asterisco representa un identificador de tipo de datos específico. Para enviar los valores de salida a la base de datos, hay que llamar a la función ' outputResult() '.
Si se produce un error, llame a la función estándar de R ' stop() o utilice la función de la API de AE denominada ' userError(). Ambas funciones interrumpen la ejecución del programa y devuelven el mensaje de error a la persona que llama.
Una compilación
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/applyop.RDurante el paso de compilación, el archivo fuente de entrada se serializa utilizando la API estándar de R y se prepara para su posterior ejecución. La salida se almacena en una ruta predefinida que es accesible desde el Host y en las SPUs, dependiendo de la base de datos y los nombres de usuario.
Registro
- Como nombre de la plantilla debe especificarse udf.
- El nombre de usuario, el nombre de la base de datos y la firma UDX, incluido el tipo de salida, deben coincidir con los valores de compilación.
- El nombre del ejecutable debe coincidir con el nombre del archivo fuente del paso de compilación.
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --user nz --db dev --template udf \
--sig 'applyop(VARARGS)' --return INT4 --exe applyop.REn ejecución
SELECT applyop('+', 4, 10);
APPLYOP
---------
14
(1 row)
SELECT applyop('*', 3, 5);
APPLYOP
---------
15
(1 row)
SELECT applyop('-', 3, 5);
ERROR: Error in function () : incorrect operator: -