R言語スカラー関数 1
以下の例では、すべての文字入力列の長さの合計を返す関数を作成している。
コード
R AEでは、ユーザーから提供される主なオブジェクトは「nz.fun」と呼ばれる関数である。 これはメインのAEループをカプセル化し、R AE APIを使用してデータの受信と出力を行う。 次の例は、Rにおける'applyop実装である。
nz.fun <- function () {
while(getNext()) {
op <- getInputColumn(0)
X <- c()
for (i in seq(1, inputColumnCount()-1)) {
x <- as.numeric(getInputColumn(i))
if (!is.null(x) && !is.na(x))
X <- append(X, x)
}
if (op != '+' && op != '*')
stop('incorrect operator: ', op)
setOutputInt32(0, eval(parse(text=paste(X, collapse=op))))
outputResult()
}
}
メインループは、'getNext() falseを返した時点で終了する。 各入力行は、インデックスで指定された列の値を返す'getInputColumn()でアクセスされる。 最初の列のインデックスは0で、最後の列のインデックスは'inputColumnCount()-1である。 出力値は「setOutput*関数で扱われ、アスタリスクは特定のデータ型識別子を表す。 出力値をデータベースに送るには、「outputResult()関数を呼び出す必要がある。
エラーが発生した場合は、R 標準の 'stop()関数を呼び出すか、AE API 関数の 'userError() を使用する。 どちらの関数もプログラムの実行を中断し、エラーメッセージを呼び出し元に返す。
コンパイル
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/applyop.Rコンパイル・ステップでは、入力ソース・ファイルは標準的なR APIを使ってシリアライズされ、さらに実行できるように準備される。 出力は、データベースとユーザー名に応じて、ホストおよびSPUからアクセス可能な定義済みのパスに保存される。
登録
- テンプレート名にはudfを指定しなければならない。
- ユーザー名、データベース名、および出力タイプを含むUDX署名は、コンパイル値と一致している必要があります。
- 実行ファイル名は、コンパイル・ステップのソース・ファイル名と一致していなければならない。
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --user nz --db dev --template udf \
--sig 'applyop(VARARGS)' --return INT4 --exe applyop.R実行中
SELECT applyop('+', 4, 10);
APPLYOP
---------
14
(1 row)
SELECT applyop('*', 3, 5);
APPLYOP
---------
15
(1 row)
SELECT applyop('-', 3, 5);
ERROR: Error in function () : incorrect operator: -