사용자 정의 함수 실행
사용자 정의 함수는 각 행에서 실행하거나 그룹화 열이 지정된 각 행 그룹에서 실행할 수 있습니다. 첫 번째 경우는 ' nzApply()', 두 번째 기능은 ' nzTAapply() ' 함수에 의해 구현됩니다. 또한 사용자가 데이터를 수동으로 반복할 수 있는 두 가지 유연한 함수인 ' nzRun() '과 ' nzRunHost() '도 있습니다.
nzApply
nz.data.frame)의 각 행에 사용자가 제공한 함수를 적용합니다. 처리된 각 행에 대해 최대 하나의 결과 행(벡터, 목록)이 출력 ' 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)의 각 하위 집합(행 그룹)에 사용자가 제공한 함수를 적용합니다. 하위 집합은 지정된 인덱스 열에 의해 결정됩니다. 함수를 적용한 결과는 데이터 프레임에 저장됩니다. 아래 예시에서는 ' nzApply() ' 예시와 동일한 ' nz.data.frame '이 사용됩니다. 이 예제에는 홍채 데이터 세트가 포함되어 있습니다.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 versicolor세부사항
이러한 함수의 출력은 ' output.name '과 ' output.signature '의 지정 여부에 따라 달라집니다. ' nzApply()'의 경우 ' data.frame ' 클래스의 객체가 반환됩니다. 객체는 함수에서 반환되는 시퀀스와 동일한 수의 열을 가집니다. output.name '을 제공하지 않으면 테이블이 생성되지 않습니다. ' nzTApply()'의 경우 ' output.name '가 제공된 경우 ' output.signature '도 지정해야 합니다. ' output.signature 매개변수는 스파스 테이블을 수신하지 않고 원하는 출력 열 유형을 설정하는 데 사용할 수 있으며, 매개변수가 제공되면 ' fun 이러한 유형으로 형변환할 수 있는 값을 반환해야 합니다.
' fun ' 기능으로 인해 오류가 발생하는 경우 디버거 모드를 사용하여 오류가 발생하는 조건을 조사할 수 있습니다. ' debugger.mode=TRUE'이면 결과 테이블이 Netezza 시스템에 저장되지 않습니다. 대신, 모든 그룹에 대해 진단 테스트가 호출되고 오류를 유발하는 첫 번째 그룹의 환경이 로컬 R 클라이언트로 전송되어 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)디버그 모드에서 ' nzTApply() ' 함수는 그룹 처리를 위한 요약을 반환합니다. 이 요약은 다음 열이 있는 표로 제공됩니다:- 첫 번째 열에는 결과 또는 오류 설명이 포함됩니다.
- 두 번째 열에는 결과 유형(오류 발생 시 시도 오류)이 포함됩니다.
- 세 번째 열에는 지정된 결과가 반환되는 그룹 이름이 포함됩니다. 이 예에서는 세 개의 그룹이 있으며 한 그룹이 오류를 생성합니다.
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 versicolor그런 다음 오류를 일으킨 첫 번째 그룹에 대해 덤프된 환경이 원격 SPU에서 R 클라이언트로 다운로드되고 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)여기서,- X
- 입력 데이터 프레임을 지정합니다.
- 여백
- 현재 사용되지 않지만 인수가 필요하므로 NULL을 전달해야 합니다.
- 오락
- 사용자 정의 함수를 지정합니다.
- output.name
- Netezza 시스템에서 생성된 출력 테이블의 이름을 지정합니다.
- output.signature
- 출력 테이블 열의 데이터 유형을 나타냅니다. 제공하지 않으면 일반(스파스) 테이블이 생성됩니다.
- clear.existing
- '
TRUE면 출력 테이블이 현재 존재하는 경우 삭제합니다. - debugger.mode
- Ii '
TRUE, ' nzTApply 디버거 모드에서 작동합니다. - ...
- 이러한 인수는 ' fun' 에 전달됩니다.
- 간소화
- 사용되지 않음, 호환성을 위해 포함됨.
- 색인
- 다음 항목 중 '
INDEX제공될 수 있는 데이터 세트의 색인을 생성하는 데 사용되는 값입니다:- '
X'의 열 중 값이 있어야 하는 문자열입니다. - '
X'의 열 수보다 크지 않은 정수입니다.
- '