Fonction scalaire en langue R 2

La fonction suivante calcule la longueur totale des colonnes d'entrée de caractères.

Coder

Introduisez le code suivant dans le fichier " /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()
}
}

Compilation

Compilez le code comme suit :
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/rlength.R

Enregistrement

Pour tirer pleinement parti du code R, enregistrez l'UDAP compilé avec la signature d'entrée VARARGS. Cette signature indique que la fonction en question peut traiter un nombre quelconque d'arguments de types arbitraires :
/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

Dans ces exemples, l'utilisateur est désigné sous le nom de " nz, qui est un exemple d'ID d'utilisateur. La valeur utilisée doit être un nom d'utilisateur valide de la base de données.

En cours d'exécution

Lorsque vous exécutez cette fonction, vous obtenez le résultat suivant :
SELECT rlength('sample text');
RLENGTH
---------
11
(1 row)
Lorsque vous exécutez cette fonction pour un tableau " iris, qui est une copie de l'ensemble de données R standard " iris, vous obtenez le résultat suivant :
SELECT rlength(SPECIES) FROM iris;
RLENGTH
---------
6
6
6
(147 more rows)
L'exemple suivant illustre l'utilisation de la signature d'entrée VARARGS :
SELECT rlength('sample text',1, 'another text',2,3,4,'and one more text');
RLENGTH
---------
40
(1 row)