Ausführen benutzerdefinierter Funktionen
Benutzerdefinierte Funktionen können entweder für jede einzelne Zeile oder für jede Gruppe von Zeilen mit einer Gruppierungsspalte ausgeführt werden. Der erste Fall wird durch " nzApply() abgedeckt, die zweite Funktionalität wird durch die Funktion " nzTAapply() realisiert. Außerdem gibt es zwei flexiblere Funktionen, ' nzRun() und ' nzRunHost(), mit denen der Benutzer die Daten manuell durchgehen kann.
nzApply
nz.data.frame) an. Für jede verarbeitete Zeile erwartet sie höchstens eine Ergebniszeile (Vektor, Liste), die in die Ausgabe " mz.data.frame eingefügt wird.data(iris)
if (nzExistTable('iris')) {nzDeleteTable('iris')}
d <-as.nz.data.frame(iris)
f <- function(x) { return(sqrt(x[[1]])) }
if (nzExistTable('apply_output')) nzDeleteTable('apply_output')
r <- nzApply(d[,1], NULL, f, output.name='apply_output',
output.signature=list(SQUAREROOT=NZ.DOUBLE))
head(r)
# SQUAREROOT
#1 2.645751
#2 2.626785
#3 2.366432
#4 2.366432
#5 2.366432
#6 2.366432
# this exists also as an overloaded apply method and the following
# returns the same result
nzDeleteTable('apply_output')
r <- apply(d[,1], NULL, f, output.name='apply_output',
output.signature=list(SQUAREROOT=NZ.DOUBLE))f <- function(x) { return(sqrt(as.numeric(x[[1]]))) }
if (nzExistTable('apply_output')) nzDeleteTable('apply_output')
r <- nzApply(d, NULL, f, output.name='apply_output',
output.signature=list(SQUAREROOT=NZ.DOUBLE))
head(r)
# SQUAREROOT
#1 2.258318
#2 2.213594
#3 2.213594
#4 2.258318
#5 2.258318
#6 2.258318nzTApply
nz.data.frame) an. Die Teilmengen werden durch eine bestimmte Indexspalte bestimmt. Die Ergebnisse der Anwendung der Funktionen werden in einem Datenrahmen gespeichert. Im folgenden Beispiel wird derselbe " nz.data.frame wie im Beispiel " nzApply() verwendet. Das Beispiel enthält den Irisdatensatz.print(d)
#SELECT Sepal_Length,Sepal_Width,Petal_Length,Petal_Width, Species FROM nziris
# the following lines do the same - compute the mean value
# in every group
nzTApply(d, d[,5], mean)
nzTApply(d, 'Species', mean)
nzTApply(d, 5, mean)
# Sepal_Length Sepal_Width Petal_Length Petal_Width Species Species
#1 6.588 2.974 5.552 2.026 nan virginica
#2 5.006 3.428 1.462 0.246 nan setosa
#3 5.936 2.770 4.260 1.326 nan versicolorDetails zu
Die Ausgabe dieser Funktionen hängt davon ab, ob ' output.name und ' output.signature angegeben sind. Für " nzApply() wird ein Objekt der Klasse " data.frame zurückgegeben. Das Objekt hat die gleiche Anzahl von Spalten wie die Sequenzen, die von fun zurückgegeben werden. Wird output.name nicht angegeben, wird keine Tabelle erstellt. Wenn für " nzTApply() ein " output.name angegeben wird, muss auch " output.signature angegeben werden. Der Parameter " output.signature kann verwendet werden, um zu vermeiden, dass eine spärliche Tabelle empfangen wird, und um die gewünschten Ausgabespaltentypen festzulegen; wenn der Parameter angegeben wird, muss " fun Werte zurückgeben, die in diese Typen umgewandelt werden können.
Wenn die Funktion ' fun Fehler verursacht, kann der Debugger-Modus verwendet werden, um die Bedingungen zu untersuchen, unter denen Fehler auftreten. Wenn " debugger.mode=TRUE, dann wird die Ergebnistabelle nicht im Netezza gespeichert. Stattdessen wird für jede Gruppe ein Diagnosetest aufgerufen, und die Umgebung der ersten Gruppe, die einen Fehler verursacht, wird zum lokalen R-Client transportiert und im R-Debugger geöffnet.
nziris = nz.data.frame('iris')
FUN5 = function(x) {
if(min(x[,1]) < 4.5) cov(0) else min(x[,1])
} nzTApply(nziris, 5, FUN5, debugger.mode=T)Im Debug-Modus liefert die Funktion ' nzTApply() eine Zusammenfassung für die Gruppenverarbeitung. Diese Zusammenfassung wird in einer Tabelle mit den folgenden Spalten dargestellt:- Die erste Spalte enthält das Ergebnis oder die Fehlerbeschreibung.
- Die zweite Spalte enthält die Art des Ergebnisses (try-error im Falle eines Fehlers).
- Die dritte Spalte enthält den Gruppennamen, für den das gegebene Ergebnis zurückgegeben wird. In diesem Beispiel gibt es drei Gruppen, wobei eine Gruppe einen Fehler erzeugt.
Found 1 error
values type group
1 101 integer virginica
2 supply both 'x' and 'y' or a matrix-like 'x' try-error setosa
3 51 integer versicolorDann wird für die erste Gruppe, die einen Fehler verursacht hat, eine gedumpte Umgebung von der entfernten SPU auf den R-Client heruntergeladen und im R-Debugger geöffnet.nzApply(X, MARGIN, FUN, output.name = NULL, output.signature =
NULL, clear.existing = FALSE, ...)
nzTApply(X, INDEX, FUN = NULL, output.name = NULL, output.signature = NULL,
clear.existing = FALSE, debugger.mode = FALSE, ..., simplify = TRUE)Dabei gilt:- X
- Gibt den Eingabedatenrahmen an.
- Rand
- Derzeit nicht verwendet, aber das Argument ist erforderlich; NULL muss übergeben werden.
- Spaß
- Gibt die benutzerdefinierte Funktion an.
- output.name
- Gibt den Namen der auf dem Netezza erstellten Ausgabetabelle an.
- output.signature
- Bezeichnet die Datentypen für die Spalten der Ausgabetabelle. Wenn keine Angaben gemacht werden, wird eine generische (spärliche) Tabelle erstellt.
- clear.existing
- Wenn '
TRUE, löschen Sie die Ausgabetabelle, falls sie derzeit existiert. - debugger.mode
- Ii '
TRUE, ' nzTApply funktioniert im Debugger-Modus. - ...
- Diese Argumente werden an " fun übergeben.
- Vereinfachung
- Nicht verwendet, aus Kompatibilitätsgründen enthalten.
- Index
- Der Wert, der für den Index des Datensatzes verwendet wird, wobei "
INDEXals einer der folgenden Werte angegeben werden kann:- Eine Zeichenkette, deren Wert in den Spalten von "
Xenthalten sein muss. - Eine ganze Zahl, die nicht größer ist als die Anzahl der Spalten von "
X.
- Eine Zeichenkette, deren Wert in den Spalten von "