ORE 使用说明
大多数Oracle R Enterprise的方法和对象以ore为前缀
,ore表明它存储了对应于Oracle 数据库的元数据。ore.frame为Oracle R Enterprise元数据对象,对应于数据库中的表。
ore.frame类似于R中的数据框。
ore.drop(table="IRIS_TABLE")
iris$id <- 1:150
ore.create(iris,table="IRIS_TABLE")
#加载R data frame到Database
ore.create(data_frame, table="TABLE_NAME")
#将R对象存储到数据库中作为一个临时对象,并返回用于处理的ore对象。
ore.push(data.frame)
#测试是否在ORE schema中存在ore.frame对象。但必须先用 ore.sync()进行同步。
ore.exists()
#删除数据库中的表v。
ore.drop(table="v")
#将数据库中的NARROW表或视图创建为R中名为df_narrow数据框,需要注意数据框的大小,防止超过R的限制。
df_narrow <- ore.pull(NARROW)
#数据库中的表没有定义行的数据,不能完全映射到R中的数据结构。可以在数据库中使用ORDER BY语句。
#row.names提供定义排序,但没有添加索引。可用在单列或多列上, row.names用在未排序的数据,产生错误。
#ORE object has no unique key - using random order
#检索指定的ore.frame对象,代表数据库中的表或视图,在Oracle R Enterprise会话中提供schema。
IRIS_TABLE <- ore.get("IRIS_TABLE")
#将一个无重复无缺失值的变量作为数据框的行名属性
row.names(IRIS_TABLE) <- IRIS_TABLE$id
#查看结果
row.names(head(IRIS_TABLE))
#按照索引列出
IRIS_TABLE[c(1L,2L,3L),]
#将R对象存贮在数据库中,使用当点用户的schema
ore.save(iris,name="iris",append = F)
#加载指定数据库中的R对象
ore.load("iris")
#从用户的schema中删除指定的数据存储
ore.delete("iris")
#列出用户schema中的数据存储和基本描述信息
ore.datastore()
#返回一个描述数据存储的名字和汇总信息的dataframe
ore.datastoreSummary("iris")
ore.sync()
ore.ls()
set.seed(123)
N <- 1000000
mydata <- data.frame(x = rnorm(N, mean = 20, sd = 2),
group = sample(letters, N, replace = TRUE,
prob = (26:1)/sum(26:1)))
mydata$y <-rbinom(N, 1,
1/(1+exp(-(.5 - 0.25 * mydata$x + .1 * as.integer(mydata$group)))))
MYDATA <- ore.push(mydata)
rm(mydata)
# Create a function that creates random row indices from large tables
mysampler <- function(n, size, replace = FALSE)
{
#' Random Whole Number Sampler
#' @param n number of observations in sample
#' @param size total number of observations
#' @param replace indicator for sampling with replacement
#' @return numeric vector containing the sample indices
n <- round(n)
size <- round(size)
if (n < 0) stop("'n' must be a non-negative number")
if (size < 1) stop("'size' must be a positive number")
if (!replace && (n > size))
stop("'n' cannot exceed 'size' when 'replace = FALSE'")
if (n == 0)
numeric()
else if (replace)
round(runif(n, min = 0.5, max = size + 0.5))
else
{
maxsamp <- seq(size + 0.5, by = -1, length.out = n)
samp <- round(runif(n, min = 0.5, max = maxsamp))
while(length(bump1 <- which(duplicated(samp))))
samp[bump1] <- samp[bump1] + 1
samp
}
}
N <- nrow(MYDATA)
sampleSize <- 500
#简单随机抽样Simple random sampling
srs <- mysampler(sampleSize, N)
simpleRandomSample <- ore.pull(MYDATA[srs, , drop = FALSE])
#系统抽样Systematic sampling
systematic <- round(seq(1, N, length.out = sampleSize))
systematicSample <- ore.pull(MYDATA[systematic, , drop = FALSE])
#分层抽样Stratified sampling
stratifiedSample <-
do.call(rbind,lapply(split(MYDATA, MYDATA$group),
function(y){
ny <- nrow(y)
y[mysampler(sampleSize * ny/N, ny), , drop = FALSE]
}))
#整群抽样Cluster sampling
clusterSample <- do.call(rbind, sample(split(MYDATA, MYDATA$group), 2))
#便利抽样Accidental/Convenience sampling(via row order access)
convenientSample1 <- head(MYDATA, sampleSize)
#便利抽样Accidental/Convenience sampling (via hashing)
maxHash <- 2^32 # maximum allowed in ore.hash
convenient2 <- (ore.hash(rownames(MYDATA), maxHash)/maxHash) <= (sampleSize/N)
convenientSample2 <- ore.pull(MYDATA[convenient2, , drop = FALSE])
#随机分组(Random Partitioning)
#靠给透明层中的ore.frame增加一个分组变量完成
k <- 5
nrowX <- nrow(IRIS_TABLE)
IRIS_TABLE$partition <- sample(rep(1:k, each = nrowX/k, length.out = nrowX), replace =
TRUE)
results <- ore.groupApply(IRIS_TABLE, IRIS_TABLE$partition, function(y) {...}, parallel = TRUE)
,ore表明它存储了对应于Oracle 数据库的元数据。ore.frame为Oracle R Enterprise元数据对象,对应于数据库中的表。
ore.frame类似于R中的数据框。
ore.drop(table="IRIS_TABLE")
iris$id <- 1:150
ore.create(iris,table="IRIS_TABLE")
#加载R data frame到Database
ore.create(data_frame, table="TABLE_NAME")
#将R对象存储到数据库中作为一个临时对象,并返回用于处理的ore对象。
ore.push(data.frame)
#测试是否在ORE schema中存在ore.frame对象。但必须先用 ore.sync()进行同步。
ore.exists()
#删除数据库中的表v。
ore.drop(table="v")
#将数据库中的NARROW表或视图创建为R中名为df_narrow数据框,需要注意数据框的大小,防止超过R的限制。
df_narrow <- ore.pull(NARROW)
#数据库中的表没有定义行的数据,不能完全映射到R中的数据结构。可以在数据库中使用ORDER BY语句。
#row.names提供定义排序,但没有添加索引。可用在单列或多列上, row.names用在未排序的数据,产生错误。
#ORE object has no unique key - using random order
#检索指定的ore.frame对象,代表数据库中的表或视图,在Oracle R Enterprise会话中提供schema。
IRIS_TABLE <- ore.get("IRIS_TABLE")
#将一个无重复无缺失值的变量作为数据框的行名属性
row.names(IRIS_TABLE) <- IRIS_TABLE$id
#查看结果
row.names(head(IRIS_TABLE))
#按照索引列出
IRIS_TABLE[c(1L,2L,3L),]
#将R对象存贮在数据库中,使用当点用户的schema
ore.save(iris,name="iris",append = F)
#加载指定数据库中的R对象
ore.load("iris")
#从用户的schema中删除指定的数据存储
ore.delete("iris")
#列出用户schema中的数据存储和基本描述信息
ore.datastore()
#返回一个描述数据存储的名字和汇总信息的dataframe
ore.datastoreSummary("iris")
ore.sync()
ore.ls()
set.seed(123)
N <- 1000000
mydata <- data.frame(x = rnorm(N, mean = 20, sd = 2),
group = sample(letters, N, replace = TRUE,
prob = (26:1)/sum(26:1)))
mydata$y <-rbinom(N, 1,
1/(1+exp(-(.5 - 0.25 * mydata$x + .1 * as.integer(mydata$group)))))
MYDATA <- ore.push(mydata)
rm(mydata)
# Create a function that creates random row indices from large tables
mysampler <- function(n, size, replace = FALSE)
{
#' Random Whole Number Sampler
#' @param n number of observations in sample
#' @param size total number of observations
#' @param replace indicator for sampling with replacement
#' @return numeric vector containing the sample indices
n <- round(n)
size <- round(size)
if (n < 0) stop("'n' must be a non-negative number")
if (size < 1) stop("'size' must be a positive number")
if (!replace && (n > size))
stop("'n' cannot exceed 'size' when 'replace = FALSE'")
if (n == 0)
numeric()
else if (replace)
round(runif(n, min = 0.5, max = size + 0.5))
else
{
maxsamp <- seq(size + 0.5, by = -1, length.out = n)
samp <- round(runif(n, min = 0.5, max = maxsamp))
while(length(bump1 <- which(duplicated(samp))))
samp[bump1] <- samp[bump1] + 1
samp
}
}
N <- nrow(MYDATA)
sampleSize <- 500
#简单随机抽样Simple random sampling
srs <- mysampler(sampleSize, N)
simpleRandomSample <- ore.pull(MYDATA[srs, , drop = FALSE])
#系统抽样Systematic sampling
systematic <- round(seq(1, N, length.out = sampleSize))
systematicSample <- ore.pull(MYDATA[systematic, , drop = FALSE])
#分层抽样Stratified sampling
stratifiedSample <-
do.call(rbind,lapply(split(MYDATA, MYDATA$group),
function(y){
ny <- nrow(y)
y[mysampler(sampleSize * ny/N, ny), , drop = FALSE]
}))
#整群抽样Cluster sampling
clusterSample <- do.call(rbind, sample(split(MYDATA, MYDATA$group), 2))
#便利抽样Accidental/Convenience sampling(via row order access)
convenientSample1 <- head(MYDATA, sampleSize)
#便利抽样Accidental/Convenience sampling (via hashing)
maxHash <- 2^32 # maximum allowed in ore.hash
convenient2 <- (ore.hash(rownames(MYDATA), maxHash)/maxHash) <= (sampleSize/N)
convenientSample2 <- ore.pull(MYDATA[convenient2, , drop = FALSE])
#随机分组(Random Partitioning)
#靠给透明层中的ore.frame增加一个分组变量完成
k <- 5
nrowX <- nrow(IRIS_TABLE)
IRIS_TABLE$partition <- sample(rep(1:k, each = nrowX/k, length.out = nrowX), replace =
TRUE)
results <- ore.groupApply(IRIS_TABLE, IRIS_TABLE$partition, function(y) {...}, parallel = TRUE)
评论
发表评论