mrnorm <- function(x, y)
{
pmean <- if(!is.null(y[['mean']])) as.numeric(y[['mean']]) else 0
pstdv <- if(!is.null(y[['stdv']])) as.numeric(y[['stdv']]) else 1
rnorm ( x[,1] , mean = pmean , sd = pstdv )
}
rnormParameters <- function()
{
data.frame(
datatype = c("float", "float"),
length = c(NA, NA),
scale = c(NA, NA),
name = c("mean", "stdv")
)
}
rnormFactory <- function()
{
list ( name = mrnorm,
udxtype = c("transform"),
intype = c("int"),
outtype = c("float"),
outnames = c("rnorm"),
parametertypecallback = rnormParameters
)
}
mrnorm()说明:
如果 mean 变量未定义,则赋值 0
如果 stdy 变量未定义,则赋值 1
通过 R 标准函数 rnorm()实现正态分布
上述是正态分布的核心功能,只需要三行代码就可以实现。
第二个函数 (rnormParameters) 用来定义可选参数的名称 (“mean” and “std”) 以及他
们的类型(float)。如果没有参数,可忽略这个函数。
第三个函数 (rnormFactory)提供了 UDx 和 Vertica 间输入和输出参数的数据类型定
义。
可以通过下面的 SQL 将 R-UDx 部署到 Vertica:
CREATE OR REPLACE LIBRARY librnorm AS '/tmp/rnorm.R' LANGUAGE 'R';
CREATE OR REPLACE TRANSFORM FUNCTION rnorm AS LANGUAGE 'R'
NAME 'rnormFactory' LIBRARY librnorm;
评论