Zusätzliche einfache Tabellenfunktionen der Sprache R
Zum besseren Verständnis des Konzepts der Agrarumweltmaßnahmen können Sie sich die folgenden Beispiele ansehen.
Tabellenfunktion Beispiel 1
In diesem Beispiel wird eine Funktion erstellt, die die Gesamtlänge der Zeicheneingabespalten und die Gesamtsumme aller numerischen Eingabespalten für jede Eingabezeile zurückgibt.
Code erstellen
nz.fun <- function () {
while(getNext()) {
tl <- 0
ts <- 0
for (i in seq(inputColumnCount())) {
x <- getInputColumn(i-1)
if (is.character(x)) {
tl <- tl + nchar(x)
}
if (is.numeric(x)) {
ts <- ts + as.double(x)
}
}
setOutputInt32(0, tl)
setOutputDouble(1, ts)
outputResult()
}
}
Kompilierung
/nz/export/ae/utilities/bin/compile_ae --language r --version 3 \
--template compile --user nz --db dev /tmp/sampleudtf.RRegistrierung
/nz/export/ae/utilities/bin/register_ae --language r --version 3 --user nz \
--db dev --template udtf --sig 'rtotal(VARCHAR(1024),DOUBLE)' \
--return 'TABLE(length INT4, sum DOUBLE)' --exe sampleudtf.RAktiv
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1));
LENGTH | SUM
--------+-----
4 | 1
(1 row)
Tabelle Funktion Beispiel 2
Dieses Beispiel zeigt mehrere Ausgabezeilen. Da die Gesamtlänge der Zeichenspalten ein
Code erstellen
nz.fun <- function () {
while(getNext()) {
tl <- 0
ts <- 0
for (i in seq(inputColumnCount())) {
x <- getInputColumn(i-1)
if (is.character(x)) {
tl <- tl + nchar(x)
}
if (is.numeric(x)) {
ts <- ts + as.double(x)
}
}
setOutputString(0, 'total length of character columns')
setOutputDouble(1, tl)
outputResult()
setOutputString(0, 'total sum of numerics')
setOutputDouble(1, ts)
outputResult()
}
}
integer, und die Gesamtsumme von numeric ist vom Typ double, wählen Sie den flexibelsten Datentyp für die zweite Ausgabespalte auf der Grundlage der Datentypen der Eingaben, in diesem Fall double. Der R-Code weicht für dieses Beispiel leicht ab.
Kompilierung
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/sampleudtf.RRegistrierung
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --user nz --db dev --template udtf \
--sig 'rtotal(VARCHAR(1024),DOUBLE)' \
--return 'TABLE(name VARCHAR(64), value DOUBLE)' \
--exe sampleudtf.RAktiv
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1));
NAME | VALUE
-----------------------------------+-------
total length of character columns | 4
total sum of numerics | 1
(2 rows)
Tabelle Funktion Beispiel 3
Wenn Sie den Registrierungsbefehl aus dem vorherigen Beispiel ändern, können Sie eine Funktion mit dynamischer Eingabesignatur erstellen, indem Sie VARARGS verwenden.
Die Schritte für den R-Code und die Kompilierung sind die gleichen wie im vorherigen Beispiel.
Registrierung
/nz/export/ae/utilities/bin/register_ae --language r --version 3 \
--user nz --db dev --template udtf --sig 'rtotal(VARARGS)' \
--exe sampleudtf.R --return 'TABLE(name VARCHAR(64), value DOUBLE)'Aktiv
SELECT * FROM TABLE WITH FINAL(rtotal('text', 1, 'second text',
2, 3, 4, 'the last text'));
NAME | VALUE
-----------------------------------+-------
total length of character columns | 28
total sum of numerics | 10
(2 rows)