R función escalar lingüística 2

La siguiente función calcula la longitud total de las columnas de entrada de caracteres.

Código

Introduce el siguiente código en el archivo ' /tmp/rlength.R ':
nz.fun <- function () {
while(getNext()) {
s <- 0
for (i in seq(inputColumnCount())) {
x <- getInputColumn(i-1)
if (is.character(x)) {
s <- s + nchar(x)
}
}
if (s == 0) {
stop('no character columns in input')
}
setOutputInt32(0, s)
outputResult()
}
}

Una compilación

Compila el código como sigue:
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/rlength.R

Registro

Para aprovechar al máximo el código R, registre la UDAP compilada con la firma de entrada VARARGS. Esta firma indica que la función específica puede manejar cualquier número de argumentos de tipos arbitrarios:
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --user nz --db dev --template udf \
--sig 'rlength(VARARGS)' --return INT4 --exe rlength.R

En estos ejemplos el usuario se especifica como ' nz, que es un ID de usuario de ejemplo. El valor que utilice debe ser un nombre de usuario de base de datos válido.

En ejecución

Al ejecutar esta función, se obtiene el siguiente resultado:
SELECT rlength('sample text');
RLENGTH
---------
11
(1 row)
Al ejecutar esta función para una tabla ' iris, que es una copia del conjunto de datos estándar de R ' iris ' se obtiene el siguiente resultado:
SELECT rlength(SPECIES) FROM iris;
RLENGTH
---------
6
6
6
(147 more rows)
El siguiente ejemplo muestra el uso de la firma de entrada VARARGS:
SELECT rlength('sample text',1, 'another text',2,3,4,'and one more text');
RLENGTH
---------
40
(1 row)