rqTableEval
関数は、EXP_NAM
パラメータで指定されているスクリプト内のR関数を実行します。INP_CUR
パラメータを使用して、データをR関数に渡します。PAR_CUR
パラメータを使用して、引数をR関数に渡すことができます。
R関数は、データベース内にSQL表として表示されるR data.frame
オブジェクトを返します。OUT_QRY
パラメータを使用して、返される値の形式を定義します。
構文
rqTableEval
(
INP_CUR REF CURSOR IN
PAR_CUR REF CURSOR IN
OUT_QRY VARCHAR2 IN
EXP_NAM VARCHAR2 IN)
パラメータ
表A-2 rqTableEval関数のパラメータ
パラメータ | 説明 |
---|---|
|
|
|
入力関数に渡す引数値を含むカーソル。 |
|
次のうちの1つ。
|
|
Oracle R EnterpriseのRスクリプト・リポジトリ内のスクリプトの名前。 |
戻り値
関数rqTableEval
は、OUT_QRY
パラメータ値で指定されている構造を持つ表を返します。
例
例A-9の最初にあるPL/SQLブロックでは、スクリプトmyNaiveBayesModel
がOracle R EnterpriseのRスクリプト・リポジトリ内に存在しないようにするために、このスクリプトを削除します。次に、関数を作成して、それをスクリプトmyNaiveBayesModel
としてリポジトリに格納します。
このR関数は、2つの引数(操作対象のデータおよびデータストアの名前)を受け入れます。この関数は、iris
データセットに基づいてNaive Bayesモデルを構築します。Naive Bayesはe1071パッケージ内にあります。
myNaiveBayesModel
関数はe1071パッケージをロードして、データベース・サーバーのRエンジンで関数が実行されるときにその関数本体がe1071パッケージにアクセスできるようにします。data.frame
内のファクタはユーザー定義の埋込みR関数にロードされるときに文字列ベクターに変換されるため、myNaiveBayesModel
関数は明示的に文字ベクターをRファクタに変換します。
myNaiveBayesModel
関数は指定された列からデータを取得した後、モデルを作成してデータストアに保存します。R関数は、関数の実行結果として表示可能な単純な値を持つためにTRUE
を返します。
例A-9では次に、rqTableEval
関数を呼び出すSELECT
文を実行します。churnGroupEval
関数のINP_CUR
引数で、SELECT
文は、R関数に渡すデータセットを指定します。データは、ore.create(iris, "IRIS")
の呼出しによって作成されたIRIS表から取得されます(この例には示していません)。rqTableEval
関数のINP_CUR
引数は、R関数に渡すデータストアの名前を指定し、ユーザー定義のR関数の埋込みRの実行中にデータベースへのOracle R Enterprise接続を確立するためのore.connect
制御引数を指定します。OUT_QRY
引数はXML形式の値を返すことを指定し、EXP_NAM
引数は、呼び出すR関数としてRスクリプト・リポジトリ内のmyNaiveBayesModel
スクリプトを指定します。
例A-9 rqTableEval関数の使用方法
BEGIN sys.rqScriptDrop('myNaiveBayesModel'); sys.rqScriptCreate('myNaiveBayesModel', 'function(dat, datastoreName) { library(e1071) dat$Species <- as.factor(dat$Species) nbmod <- naiveBayes(Species ~ ., dat) ore.save(nbmod, name = datastoreName) TRUE }'); END; / SELECT * FROM table(rqTableEval( cursor(SELECT * FROM IRIS), cursor(SELECT 'myNaiveBayesDatastore' "datastoreName", 1 as "ore.connect" FROM dual), 'XML', 'myNaiveBayesModel'));
SELECT
文は、rqTableEval
表関数から値TRUE
を含むXML文字列を返します。
次のSELECT
文に示すとおり、myNaiveBayesDatastore
データソースが生成され、オブジェクトnbmod
がこのデータソースに存在しています。
SQL> SELECT * from rquser_DataStoreContents 2 WHERE dsname = 'myNaiveBayesDatastore'; DSNAME OBJNAME CLASS OBJSIZE LENGTH NROW NCOL --------------------- ------- ---------- ------- ------ ---- ---- myNaiveBayesDatastore nbmod naiveBayes 1485 4
次のように、ローカルのRセッションでモデルをロードして表示できます。
R> ore.load("myNaiveBayesDatastore") [1] "nbmod" R> nbmod $apriori Y setosa versicolor virginica 50 50 50 $tables $tables$Sepal.Length Sepal.Length Y [,1] [,2] setosa 5.006 0.3524897 versicolor 5.936 0.5161711 virginica 6.588 0.6358796 $tables$Sepal.Width Sepal.Width Y [,1] [,2] setosa 3.428 0.3790644 versicolor 2.770 0.3137983 virginica 2.974 0.3224966 $tables$Petal.Length Petal.Length Y [,1] [,2] setosa 1.462 0.1736640 versicolor 4.260 0.4699110 virginica 5.552 0.5518947 $tables$Petal.Width Petal.Width Y [,1] [,2] setosa 0.246 0.1053856 versicolor 1.326 0.1977527 virginica 2.026 0.2746501 $levels [1] "setosa" "versicolor" "virginica" $call naiveBayes.default(x = X, y = Y, laplace = laplace) attr(,"class") [1] "naiveBayes"