R langue fonction scalaire 1

L'exemple suivant crée une fonction qui renvoie la longueur totale de toutes les colonnes d'entrée de caractères.

Coder

Dans R AE, l'objet principal fourni par l'utilisateur est une fonction appelée " nz.fun. Il encapsule la boucle principale de l'AE et utilise l'API de l'AE R pour recevoir et émettre des données. L'exemple suivant montre l'implémentation de " applyop dans R.

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

La boucle principale se termine lorsque " getNext() renvoie la valeur false, ce qui indique qu'il n'y a plus de lignes d'entrée à traiter. Chaque ligne d'entrée est accessible par le " getInputColumn() qui renvoie la valeur de la colonne spécifiée par son index. L'indice de la première colonne est zéro et l'indice de la dernière colonne est " inputColumnCount()-1. Les valeurs de sortie sont traitées par les fonctions " setOutput*, où l'astérisque représente un identifiant de type de données spécifique. Pour envoyer les valeurs de sortie à la base de données, la fonction " outputResult() doit être appelée.

En cas d'erreur, appelez la fonction R standard " stop() ou utilisez la fonction de l'API AE appelée " userError(). Les deux fonctions interrompent l'exécution du programme et renvoient le message d'erreur à l'appelant.

Compilation

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

Au cours de l'étape de compilation, le fichier source d'entrée est sérialisé à l'aide de l'API R standard et préparé pour une exécution ultérieure. La sortie est stockée sous un chemin prédéfini qui est accessible depuis l'hôte et sur les SPU, en fonction de la base de données et des noms d'utilisateur.

Enregistrement

Une fois la compilation terminée, vous devez enregistrer le code. Les conditions suivantes s'appliquent à l'étape d'enregistrement :
  • Le nom du modèle doit être udf.
  • Le nom de l'utilisateur, le nom de la base de données et la signature UDX, y compris le type de sortie, doivent correspondre aux valeurs de la compilation.
  • Le nom de l'exécutable doit correspondre au nom du fichier source de l'étape de compilation.
Enregistrez le code comme suit :
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --user nz --db dev --template udf \
--sig 'applyop(VARARGS)' --return INT4 --exe applyop.R

En cours d'exécution

Lorsque vous exécutez l'UDAP enregistré, vous obtenez le résultat suivant :
SELECT applyop('+', 4, 10);
APPLYOP
---------
14
(1 row)
SELECT applyop('*', 3, 5);
APPLYOP
---------
15
(1 row)
L'exemple suivant illustre la gestion des erreurs :
SELECT applyop('-', 3, 5);
ERROR: Error in function () : incorrect operator: -