Função escalar da linguagem R 2
A função a seguir calcula o comprimento total das colunas de entrada de caracteres.
Código
Digite o seguinte código no arquivo " /tmp/rlength.R:
nz.fun <- function () {
while(getNext()) {
s <- 0
for (i in seq(inputColumnCount())) {
x <- getInputColumn(i-1)
if (is.character(x)) {
s <- s + nchar(x)
}
}
if (s == 0) {
stop('no character columns in input')
}
setOutputInt32(0, s)
outputResult()
}
}
Compilação
Compile o código da seguinte forma:
/nz/export/ae/utilities/bin/compile_ae --language r \
--version 3 --template compile --user nz --db dev \
/tmp/rlength.RRegistro
Para aproveitar ao máximo o código R, registre o UDAP compilado com a assinatura de entrada VARARGS. Essa assinatura indica que a função específica pode lidar com qualquer número de argumentos de tipos arbitrários:
/nz/export/ae/utilities/bin/register_ae --language r \
--version 3 --user nz --db dev --template udf \
--sig 'rlength(VARARGS)' --return INT4 --exe rlength.RNesses exemplos, o usuário é especificado como " nz, que é um exemplo de ID de usuário. O valor usado deve ser um nome de usuário válido do banco de dados.
Executando
Quando você executa essa função, obtém o seguinte resultado:
SELECT rlength('sample text');
RLENGTH
---------
11
(1 row)
Quando você executa essa função para uma tabela "
iris, que é uma cópia do conjunto de dados padrão do R " iris, obtém o seguinte resultado:SELECT rlength(SPECIES) FROM iris;
RLENGTH
---------
6
6
6
(147 more rows)
O exemplo a seguir mostra o uso da assinatura de entrada VARARGS:
SELECT rlength('sample text',1, 'another text',2,3,4,'and one more text');
RLENGTH
---------
40
(1 row)