MINI MINI MANI MO
%
% Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
%
% NAME
% ore.doEval.Rd - embedded functions
%
% DESCRIPTION
% Methods for embedded R execution.
%
% NOTES
%
% MODIFIED (MM/DD/YY)
% qinwan 09/24/15 - update FUN argument description
% ffeli 09/03/15 - add INDEX argument descriptions
% qinwan 06/24/15 - add FUN.OWNER argument
% qinwan 05/21/15 - support lob type
% lbzhang 04/10/14 - add control arg ore.envAsEmptyenv
% paboyoun 12/27/13 - add ore.parallel option
% paboyoun 11/19/13 - add ore.na.omit control argument
% paboyoun 05/09/13 - change parallel argument default value
% lzhang 04/26/13 - bug 16587457: add DOP hint in ore.*Apply functions
% demukhin 11/12/12 - add control arguments
% qinwan 11/06/12 - doc R/Package version script
% demukhin 11/02/12 - bug 14539151: document INDEX
% demukhin 09/15/12 - prj: auto connect
%
\name{ore.doEval}
\alias{ore.doEval}
\alias{ore.groupApply}
\alias{ore.indexApply}
\alias{ore.rowApply}
\alias{ore.tableApply}
\title{
Oracle R Enterprise 포함된 R 스크립트 실행 함수
}
\description{
다양한 조건하에 Oracle 데이터베이스에서 함수를 실행합니다.
}
\usage{
ore.doEval(FUN, ..., FUN.VALUE = NULL, FUN.NAME = NULL, FUN.OWNER = NULL)
ore.groupApply(X, INDEX, FUN, ..., FUN.VALUE = NULL,
FUN.NAME = NULL, FUN.OWNER = NULL,
parallel = getOption("ore.parallel", NULL))
ore.indexApply(times, FUN, ..., FUN.VALUE = NULL,
FUN.NAME = NULL, FUN.OWNER = NULL,
parallel = getOption("ore.parallel", NULL))
ore.rowApply(X, FUN, ..., FUN.VALUE = NULL,
FUN.NAME = NULL, FUN.OWNER = NULL, rows = 1,
parallel = getOption("ore.parallel", NULL))
ore.tableApply(X, FUN, ..., FUN.VALUE = NULL,
FUN.NAME = NULL, FUN.OWNER = NULL)
}
\arguments{
\item{X}{
\code{\linkS4class{ore.frame}} 객체입니다.
}
\item{INDEX}{
\code{\linkS4class{ore.vector}} 객체 또는 열을
포함하는 \code{\linkS4class{ore.frame}} 또는 \code{\linkS4class{ore.factor}} 객체입니다. 이러한
각 항목은 \code{X} 인수와 길이가 동일합니다. 이 옵션은 \code{X} 함수로
전송하기 전 \code{FUN}에서 데이터를 분할하는 데 사용됩니다.
상응하는 지원되는 R 유형은 logical, integer, numeric,
character, factor입니다.
}
\item{times}{
함수를 실행하는 횟수입니다.
}
\item{FUN}{
적용할 함수입니다. \code{ore.groupApply}, \code{ore.rowApply} 및 \code{ore.tableApply}
함수의 경우 \code{FUN} 인수에 대한 첫번째
인수는 \code{\link[base]{data.frame}} 객체를 나타내야
합니다. \code{ore.indexApply} 함수의 경우
\code{FUN}에 대한 첫번째 인수는 인덱스
번호를 나타내야 합니다. \code{ore.doEval} 함수의 경우에는
\code{FUN}에 대해 인수가 필요하지 않습니다. \code{FUN}(으)로 지정된 함수는
포함된 R API를 재귀적으로 호출할 수 없습니다.
\code{FUN.NAME} 인수에서는 사용할 수 없습니다.
}
\item{\dots}{
\code{FUN}에 대한 추가 인수입니다.
\code{ore.}(으)로 시작하는 인수는 특수 제어
인수입니다. 이 인수는 \code{FUN} 또는 \code{FUN.NAME} 인수로 지정된 함수에
전달되지 않으며, 대신 클로저 실행 전후에 발생하는
사항을 제어합니다. 다음과 같은 제어 인수가
지원됩니다.
\\enumerate{
\item \code{ore.drop} - 입력 데이터의 객체 유형을
제어합니다. \code{TRUE}의 경우 한 개의 열 \code{data.frame}이(가) \code{vector}(으)로
변환됩니다. 기본값은 \code{TRUE}입니다.
\item \code{ore.na.omit} - 입력 데이터에서 누락 값의 처리를
제어합니다. \code{TRUE}의 경우 \code{ore.drop} 설정에 따라
누락 값을 포함하는 행 또는 벡터 요소가 입력
데이터에서 제거됩니다. 조각의 모든 행에 누락 값이
포함된 경우 해당 조각의 입력 데이터는 빈 \code{data.frame} 또는
\code{vector}입니다. 기본값은
\code{FALSE}입니다.
\item \code{ore.connect} - 클로저 내부의 Oracle R Enterprise에
자동으로 접속할지 여부를 제어합니다. 이는
클라이언트 세션과 동일한 인증서를 사용한 \code{ore.connect}
호출 수행과 동일합니다. 기본값은
\code{FALSE}입니다.
\item \code{ore.graphics} - 그래픽 드라이버를 시작하고 이미지를
검색할지 여부를 제어합니다. 기본값은 \code{TRUE}입니다.
\item \code{ore.png.*} - \code{ore.graphics}이(가) \code{TRUE}인 경우
\code{\link[grDevices]{png}} 그래픽 장치 드라이버의
추가 매개변수입니다. 이러한 인수의 이름 지정 규칙은
\code{ore.png.} 함수의 인수에 \code{\link[grDevices]{png}} 접두어를 추가하는
것입니다. 예를 들어, \code{ore.png.height}이(가)
제공된 경우 \code{height} 인수가 \code{\link[grDevices]{png}}
함수에 전달됩니다. 설정되지 않은 경우
\code{\link[grDevices]{png}} 함수의 표준 기본값이
사용됩니다.
\item \code{ore.envAsEmptyenv} - 객체의 참조된 환경이 직렬화 동안
빈 환경으로 바뀌어야 할지 여부를 제어합니다.
\code{list} 및 \code{formula}과(와) 같은 일부 입력 매개변수 유형과
반환된 객체는 데이터베이스에 저장되기 전에
직렬화됩니다. \code{TRUE}의 경우
객체의 참조된 환경은 상위가 \code{.GlobalEnv}인
빈 환경으로 바뀌므로 원본
참조된 환경의 객체가 직렬화되지
않습니다. 이렇게 할 때 직렬화된 객체의 크기가
상당히 줄어드는 경우도 있습니다. \code{FALSE}의 경우 참조된 환경의
모든 객체는 직렬화되고, 나중에 직렬화 해제되고
복구될 수 있습니다. 기본값은
전역 옵션 \code{ore.envAsEmptyenv}(으)로 제어됩니다.
}
}
\item{FUN.VALUE}{
반환 값에 대한 템플리트로
사용할 \code{data.frame} 또는 \code{\linkS4class{ore.frame}}입니다.
\code{ora.type} 속성을 \code{data.frame} 열에 적용해서 \code{\linkS4class{ore.frame}}의 해당
출력 열이 \code{CLOB} 또는 \code{BLOB} 유형을 사용하도록
지정할 수 있습니다.
}
\item{FUN.NAME}{
Oracle R Enterprise 데이터베이스 내 \R 스크립트 아카이브
내에서 단일 \R 함수 정의를 포함하는 직렬화된 \R
스크립트의 이름을 지정하는 문자열입니다. \code{FUN}에 사용할 수
없습니다.
Oracle R Enterprise에는 미리 정의된 여러 그래픽 스크립트가 제공됩니다.
미리 정의된 모든 스크립트에는 \code{RQG$}(으)로 시작하고 스크립트에
포함된 \\pkg{graphics} 패키지의 함수 이름으로 표시되는 예약
이름이 포함됩니다. 처음 사용하는 함수에 따라 입력 \code{\link[base]{data.frame}}의
첫번째, 첫번째와 두번째 또는 모든 열이
사용됩니다. 따라서 미리 정의된 스크립트는
\code{ore.tableApply}, \code{ore.groupApply} 또는 \code{ore.rowApply}에서만 사용할 수
있습니다. 각 함수에는 \code{...}도 있으므로
포함하는 함수에 모든 매개변수를 전달할 수 있습니다. 다음은
미리 정의된 그래픽 스크립트의 목록입니다.
\\enumerate{
\item \code{RQG$plot1d} - \code{\link[graphics]{plot}}의 래퍼입니다.
입력 \code{\link[base]{data.frame}} 객체의 첫번째 열에서
작동합니다.
\item \code{RQG$plot2d} - \code{\link[graphics]{plot}}의 래퍼입니다.
입력 \code{\link[base]{data.frame}} 객체의 처음 두 열에서
작동합니다.
\item \code{RQG$hist} - \code{\link[graphics]{hist}}의 래퍼입니다.
입력 \code{\link[base]{data.frame}} 객체의 첫번째 열에서
작동합니다.
\item \code{RQG$boxplot} - \code{\link[graphics]{boxplot}}의 래퍼입니다.
입력 \code{\link[base]{data.frame}} 객체의 첫번째 열에서
작동합니다.
\item \code{RQG$smoothScatter} - \code{\link[graphics]{smoothScatter}}의 래퍼입니다.
입력 \code{\link[base]{data.frame}} 객체의 처음 두 열에서
작동합니다.
\item \code{RQG$cdplot} - \code{\link[graphics]{cdplot}}의 래퍼입니다.
입력 \code{\link[base]{data.frame}} 객체의 처음 두 열에서
작동합니다.
\item \code{RQG$pairs} - \code{\link[graphics]{pairs}}의 래퍼입니다.
입력 \code{\link[base]{data.frame}} 객체의 모든 열에서
작동합니다.
\item \code{RQG$matplot} - \code{\link[graphics]{matplot}}의 래퍼입니다.
입력 \code{\link[base]{data.frame}} 객체의 모든 열에서
작동합니다.
}
Oracle R Enterprise에는 또한 미리 정의된 여러 \R 및 패키지 버전 스크립트가
제공됩니다. 이러한 스크립트는 \code{RQ$}(으)로 시작하고 스크립트가
포함하는 \R 함수 이름으로 표시되며 \code{ore.doEval}에서만 사용할 수
있습니다. 다음은 미리 정의된 스크립트의
목록입니다.
\\enumerate{
\item \code{RQ$R.Version} - \code{\link[base]{R.Version}}의 래퍼입니다.
인수를 사용하지 않고 \R 버전 관련 정보를 반환합니다.
\item \code{RQ$getRversion} - \code{\link[base]{getRversion}}의 래퍼입니다.
인수를 사용하지 않고 \R 버전 번호를
반환합니다.
\item \code{RQ$installed.packages} - \code{\link[utils]{installed.packages}}의 래퍼입니다.
인수를 사용하지 않고,
패키지 이름, 버전 번호 및 설치된 패키지의 패키지
설치 위치를 반환합니다.
\item \code{RQ$packageVersion} - \code{\link[utils]{packageVersion}}의 래퍼입니다.
패키지 이름을 인수로 사용하고
패키지 버전 번호를 반환합니다.
}
}
\item{FUN.OWNER}{
\code{FUN.NAME} \R 스크립트의 소유자를 지정하는 선택적인
문자열입니다. \code{\link{ore.scriptCreate}}를 사용해서 \R 스크립트를 생성하는
사용자는 해당 스크립트의 소유자입니다. \code{RQSYS}
스키마는 전역 및 미리 정의된 \R 스크립트의 소유자입니다.
\code{FUN.OWNER}이(가) 지정되지 않았거나 \code{NULL}이면
Oracle R Enterprise가 다음 순서로 소유자를 찾습니다.
현재 세션의 사용자, \code{RQSYS}. \code{FUN.OWNER} 인수는
\code{FUN.NAME} 인수에서만 사용됩니다.
}
\item{rows}{
각 조각의 최대 행 수입니다.
}
\item{parallel}{
포함된 R 작업에서 사용할 원하는 병렬도입니다.
특정 병렬도에 대해 \code{2}보다 크거나
같은 양의 정수,
병렬화를 사용하지 않는 경우 \code{FALSE} 또는 \code{1} 값,
\code{TRUE} 인수의 기본 병렬화의 경우
\code{data} 값 또는
작업의 데이터베이스 기본값의 경우 \code{NULL}입니다.
기본값은 전역 옵션 \code{ore.parallel}(으)로 지정됩니다.
}
}
\details{
\code{ore.doEval} 함수는 Oracle 데이터베이스에서 실행 중인
\R 프로세스 내에서 \code{FUN} 또는 \code{FUN.NAME} 함수를 실행합니다.
\code{ore.groupApply} 함수는 (잠재적으로 파생된) 열별로 데이터베이스
내 데이터 집합을 분할하고, Oracle 데이터베이스에서 실행 중인
\R 프로세스 내에서 이러한 분할 영역에 함수를 실행합니다. 각
분할 영역은 단일 \R 프로세스 안에 완전히 맞아야 합니다.
\code{ore.indexApply} 함수는 Oracle 데이터베이스에서 \code{index}
함수를 여러 번 실행합니다.
\code{ore.rowApply} 함수는 데이터베이스 내 데이터 집합을 행 조각으로
분할하고, Oracle 데이터베이스에서 실행 중인 \R 프로세스 내에서
이러한 분할 영역에 함수를 실행합니다. 각 분할 영역은 단일 \R
프로세스 안에 완전히 맞아야 합니다.
\code{ore.tableApply} 함수는 데이터베이스 내 데이터 집합에 함수를
실행합니다.
\code{FUN} 또는 \code{FUN.NAME} 인수를 제공해야 합니다. 보안상
이유로 \code{FUN} 인수를 사용하려면
\\option{RQADMIN} Oracle 데이터베이스 권한이 필요합니다. \\option{RQADMIN} 인증서를
가진 누군가가 \code{FUN.NAME} 인수로 표시된 \R 스크립트 생성을 게시했으므로
Oracle R Enterprise 사용 권한이 부여된 누구나
사용할 수 있습니다.
\code{FUN.OWNER} 인수는 \code{FUN.NAME} 인수와 함께 사용해서 \R
스크립트 저장소에 정의된 \R 함수를 고유하게 지정할 수 수 있습니다.
\code{parallel} 인수는 기본 SQL 질의에 추가하려는
\\option{/*+ parallel */}, \\option{/*+ parallel(DOP) */} 또는
\\option{/*+ no_parallel */} 힌트의 사용을 제어합니다.
자세한 내용은 Oracle 데이터베이스 설명서를 참조하십시오.
\code{FUN} 또는 \code{FUN.NAME} 인수를 통해 지정된 적용할 함수는
이를 호출하는 클라이언트 세션과 동일한 인증서를 사용하여
Oracle R Enterprise에 자동으로 접속됩니다. \code{ore.connect}에 상응하는
항목만 호출됩니다. \code{ore.sync}, \code{ore.attach} 및
\code{ore.get}과(와) 같은 함수는 명시적으로
호출해야 합니다.
}
\value{
\code{FUN.VALUE} 인수가 제공된 경우
\code{\linkS4class{ore.frame}} 템플리트를 따르는
\code{FUN.VALUE} 객체가 반환됩니다.
\code{FUN.VALUE} 인수가 제공되지 않은 경우
\code{ore.doEval} 및 \code{ore.tableApply} 함수는
\code{\linkS4class{ore.object}}을(를) 반환하고
\code{ore.groupApply}, \code{ore.indexApply}, \code{ore.rowApply} 함수는
\code{\linkS4class{ore.list}}을(를) 반환합니다.
}
\references{
\href{http://www.oracle.com/technetwork/database/database-technologies/r/r-enterprise/documentation/index.html}{Oracle R Enterprise}
}
\author{
Oracle \email{oracle-r-enterprise@oracle.com}
}
\seealso{
\code{\link{ore.scriptCreate}},
\code{\link[OREbase]{ore.options}}
}
\examples{
## ore.doEval
eval1 <- ore.doEval(function() "Hello, world")
eval2 <-
ore.doEval(function()
data.frame(x = "Hello, world", stringsAsFactors = FALSE))
eval3 <-
ore.doEval(function()
data.frame(x = "Hello, world", stringsAsFactors = FALSE),
FUN.VALUE =
data.frame(x = character(), stringsAsFactors = FALSE))
out.df <- data.frame(x = character(), y = raw(), stringsAsFactors = FALSE)
attr(out.df$x, "ora.type") <- "clob"
attr(out.df$y, "ora.type") <- "blob"
eval4 <-
ore.doEval(function() {
res <- data.frame(x = "Hello, world",stringsAsFactors = FALSE)
res$y[[1L]] <- charToRaw("Hello, world")
res},
FUN.VALUE = out.df)
eval1
class(eval1) # ore.object
eval2
class(eval2) # ore.object
eval3
class(eval3) # ore.frame
eval4$x
rawToChar(ore.pull(eval4$y))
## copy data to the database
IRIS <- ore.push(iris)
## ore.groupApply
grpAp1 <-
ore.groupApply(IRIS, IRIS$Species,
function(df)
if(nrow(df) == 0)
NULL
else
summary(lm(Sepal.Length ~ ., data = df[1:4])),
parallel = TRUE)
grpAp2 <-
ore.groupApply(IRIS, IRIS$Species,
function(df) {
if (nrow(df) == 0) {
species <- character()
cf <- numeric()
names(cf) <- character()
} else {
species <- as.character(df$Species[1])
cf <- coef(lm(Sepal.Length ~ .,
data = df[1:4]))
}
data.frame(Species = species,
CoefName = names(cf),
CoefValue = unname(cf),
stringsAsFactors = FALSE)
},
FUN.VALUE =
data.frame(Species = character(),
CoefName = character(),
CoefValue = numeric(),
stringsAsFactors = FALSE),
parallel = TRUE)
class(grpAp1) # ore.list
class(grpAp2) # ore.frame
## ore.indexApply
ore.indexApply(5, function(i) i)
if (interactive())
ore.indexApply(5, function(i) summary(rnorm(100)), parallel = TRUE)
## ore.rowApply
# create a classification tree for iris data
library(rpart)
irisRpart <- rpart(Species ~ ., data = iris)
irisPred <-
ore.rowApply(IRIS,
function(df, model) {
library(rpart)
cbind(df, PRED = predict(model, df, type = "class"))
}, model = irisRpart,
FUN.VALUE =
cbind(iris[integer(),], PRED = character()),
rows = 50, parallel = TRUE)
## ore.tableApply
ore.tableApply(IRIS, function(df) summary(df))
}
\keyword{data}
\keyword{programming}
\keyword{iteration}
\keyword{category}
\keyword{database}
\keyword{ORE}
OHA YOOOO