Esecuzione di funzioni definite dall'utente
Le funzioni definite dall'utente possono essere eseguite su ogni riga o su ogni gruppo di righe, in base a una colonna di raggruppamento. Il primo caso è coperto da 'nzApply(), la seconda funzionalità è realizzata dalla funzione 'nzTAapply(). Esistono anche due funzioni più flessibili, 'nzRun() e 'nzRunHost(), che consentono agli utenti di iterare i dati manualmente.
nzApply
nz.data.frame). Per ogni riga elaborata, si aspetta al massimo una riga di risultato (vettore, elenco) che viene inserita nell'uscita 'mz.data.frame.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). I sottoinsiemi sono determinati da una colonna indice specificata. I risultati dell'applicazione delle funzioni vengono inseriti in una cornice di dati. Nell'esempio seguente, viene utilizzato lo stesso " nz.data.frame dell'esempio " nzApply(). L'esempio contiene il set di dati dell'iride.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 versicolorDettagli
L'output di queste funzioni dipende dalla specificazione di 'output.name e 'output.signature. Per 'nzApply(), viene restituito un oggetto di classe 'data.frame. L'oggetto ha lo stesso numero di colonne delle sequenze restituite da fun. Se il output.name non viene fornito, non viene creata alcuna tabella. Per il 'nzTApply(), se viene fornito un 'output.name, deve essere specificato anche il 'output.signature. Il parametro 'output.signature può essere usato per evitare di ricevere una tabella rada e per impostare i tipi di colonne di output desiderati; se il parametro viene fornito, 'fun deve restituire valori che possono essere lanciati a questi tipi.
Se la funzione 'fun causa errori, è possibile utilizzare la modalità debugger per analizzare le condizioni in cui si verificano gli errori. Se 'debugger.mode=TRUE, la tabella dei risultati non viene memorizzata nel sistema Netezza. Invece, per ogni gruppo viene richiamato un test diagnostico e l'ambiente del primo gruppo che causa un errore viene trasportato al client R locale e aperto nel debugger R.
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)In modalità debug, la funzione 'nzTApply() restituisce un riepilogo per l'elaborazione del gruppo. Questo riepilogo è presentato in una tabella con le seguenti colonne:- La prima colonna contiene la descrizione dell'esito o dell'errore.
- La seconda colonna contiene il tipo di esito (try-error in caso di errore).
- La terza colonna contiene il nome del gruppo per il quale viene restituito il risultato dato In questo esempio, ci sono tre gruppi, di cui uno produce un errore.
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 versicolorQuindi, per il primo gruppo che ha causato un errore, viene scaricato un ambiente di dump dalla SPU remota al client R e aperto nel debugger R.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)dove:- X
- Specifica la struttura dei dati di input.
- Margine
- Attualmente non viene utilizzato, ma l'argomento è necessario; deve essere passato NULL.
- Fun
- Specifica la funzione definita dall'utente.
- output.name
- Specifica il nome della tabella di output creata sul sistema Netezza.
- output.signature
- Indica i tipi di dati per le colonne della tabella di output. Se non viene fornita, viene creata una tabella generica (rada).
- clear.existing
- Se '
TRUE, eliminare la tabella di output se attualmente esiste. - debugger.mode
- Ii '
TRUE, 'nzTApply funziona in modalità debugger. - ...
- Questi argomenti vengono passati a 'fun.
- semplificare
- Non utilizzato, incluso per compatibilità.
- Indice
- Il valore utilizzato per indicizzare l'insieme di dati in cui "
INDEXpuò essere fornito come uno dei seguenti elementi:- Una stringa di caratteri il cui valore deve essere presente tra le colonne di '
X. - Un numero intero non superiore al numero di colonne di '
X.
- Una stringa di caratteri il cui valore deve essere presente tra le colonne di '