getInpuData <- function(..., parameter = NULL, name = NULL, object.class = NULL,
slots = NULL, column = NULL, use.dplyr = FALSE, merge = FALSE) {
# Get condiotion of work
arg <- list(...)
psb_set <- c('tech', 'dem', 'sup', 'comm', 'group', 'region',
'year', 'slice', 'stg', 'expp', 'imp', 'trade', 'src', 'dst')
if (is.null(names(arg))) names(arg) <- rep('', length(arg))
if (any(names(arg) == 'parameters')) parameter <- arg$parameters
arg <- arg[!(names(arg) %in% c('parameters'))]
set <- arg[names(arg) %in% c(psb_set, paste(psb_set, '_', sep = ''))]
arg <- arg[!(names(arg) %in% names(set))]
if (any(names(arg) == 'regex')) {
regex <- arg$regex
arg <- arg[names(arg) != 'regex']
if (any(grep('_$', names(set)))) {
ff <- grep('_$', names(set), value = TRUE)
f2 <- gsub('_$', '', ff); names(f2) <- ff
warning(paste('Duplicated arguments: "', paste(ff, collapse = '", "'),
'", and: "',f2, '"', sep = ''))
for(i in ff) {
set[[f2[i]]] <- c(set[[f2[i]]] , set[[i]])
}
}
if (regex) {
names(set) <- paste(names(set), '_', sep = '')
}
}
alias_set <- lapply(psb_set, function(x) c(x, paste(x, '_', sep = '')))
names(alias_set) <- alias_set
alias_set$comm = c('comm', 'acomm', 'comme', 'commp')
alias_set$region = c('region', 'regionp', 'src', 'dst')
if (any(names(set) %in% c('src', 'dst'))) {
alias_set$region <- c('region', 'regionp')
}
alias_set$year = c('year', 'yearp', 'yeare')
alias_set <- alias_set[gsub('_$', '', names(set))]
# Merge parse objecte
psb_cls <- c('commodity', 'demand', 'supply', 'export', 'import', 'constraint', 'technology', 'trade')
obj <- list()
if (any(sapply(arg, class) == 'list')) {
j <- seq(along = arg)[sapply(arg, class) == 'list']
for(k in j)
for(i in seq(along = arg[[k]]))
arg[[length(arg) + 1]] <- arg[[k]][[i]]
arg <- arg[-j]
}
for(i in seq(along = arg)) {
if (class(arg[[i]]) == 'scenario') {
for(j in seq(along = arg[[i]]@model@data))
for(k in seq(along = arg[[i]]@model@data[[j]]@data))
obj[[length(obj) + 1]] <- arg[[i]]@model@data[[j]]@data[[k]]
} else if (class(arg[[i]]) == 'model') {
for(j in seq(along = arg[[i]]@data))
for(k in seq(along = arg[[i]]@data[[j]]@data))
obj[[length(obj) + 1]] <- arg[[i]]@data[[j]]@data[[k]]
} else if (class(arg[[i]]) == 'repository') {
for(j in seq(along = arg[[i]]@data))
obj[[length(obj) + 1]] <- arg[[i]]@data[[j]]
} else if (class(arg[[i]]) %in% psb_cls) {
for(j in seq(along = arg[[i]]))
obj[[length(obj) + 1]] <- arg[[i]]@data[[k]]
} else stop('There argument with unknown class: ', class(arg[[i]]))
}
if (!is.null(object.class)) obj <- obj[sapply(obj, class) %in% object.class]
if (!is.null(name)) obj <- obj[sapply(obj, function(x) x@name) %in% name]
if (anyDuplicated(sapply(obj, function(x) x@name))) {
ff <- sapply(obj, function(x) x@name); ff <- unique(ff[duplicated(ff)])
stop(paste('There are objects with duplicated name: "',
paste(ff, collapse = '", "'), '"', sep = ''))
}
# Prepare paramters list for search
gh <- new('modInp')@parameters
gh <- gh[sapply(gh, function(x) !is.null(x@misc$class))]
psb_set <- data.frame(name = sapply(gh, function(x) x@name), type = sapply(gh, function(x) x@type),
class = sapply(gh, function(x) x@misc$class), column = sapply(gh, function(x) gsub('[.].*', '', x@colName[1])),
use = rep(TRUE, length(gh)), stringsAsFactors = FALSE)
psb_set$slot <- NA
ff <- unique(psb_set$class);
cl <- lapply(ff, function(x) new(x)); names(cl) <- ff
sl <- lapply(ff, function(x) getSlots(x)); names(sl) <- ff
psb_set <- psb_set[psb_set$type %in% c('simple', 'multi'),, drop = FALSE]
result <- list()
for(i in 1:nrow(psb_set)) {
if (!is.null(gh[[psb_set[i, 'name']]]@misc$slot)) {
psb_set[i, 'slot'] <- gh[[psb_set[i, 'name']]]@misc$slot
} else if (any(psb_set[i, 'column'] == c('tax', 'subs', 'rhs'))) {
psb_set[i, 'slot'] <- 'rhs'
} else {
cc <- psb_set[i, 'class']
hh <- names(sl[[cc]])[sl[[cc]] == 'data.frame']
hh <- hh[!(hh %in% c('interpolation', 'defVal', 'units'))]
if (psb_set[i, 'type'] == 'simple') mm <- psb_set[i, 'column'] else mm <- paste(psb_set[i, 'column'], '.lo', sep = '')
psb_set[i, 'slot'] <- hh[sapply(hh, function(x) any(colnames(slot(cl[[cc]], x)) == mm))]
}
if (sl[[psb_set[i, 'class']]][psb_set[i, 'slot']] != 'data.frame' && length(set) != 0)
psb_set[i, 'use'] <- FALSE
if (psb_set[i, 'use'] && !is.null(slots)) {
psb_set[i, 'use'] <- slots %in% psb_set[i, 'slot']
}
if (psb_set[i, 'use'] && !is.null(column) && psb_set[i, 'type'] == 'simple') {
psb_set[i, 'use'] <- column %in% psb_set[i, 'column']
}
if (psb_set[i, 'use']) {
if (any(any(psb_set[i, 'column'] == c('tax', 'subs', 'rhs')))) {
#
} else if (sl[[psb_set[i, 'class']]][psb_set[i, 'slot']] != 'data.frame') {
#parameter, object, class, slot, column, (set),
rs1 <- sapply(obj[sapply(obj, class) == psb_set[i, 'class']], function(x) slot(x, psb_set[i, 'slot']))
rs2 <- sapply(obj[sapply(obj, class) == psb_set[i, 'class']], function(x) x@name)
rs <- data.frame(parameter = rep(psb_set[i, 'name'], length(rs1)),
object = rs2, class = rep(psb_set[i, 'class'], length(rs1)),
slot = rep(psb_set[i, 'slot'], length(rs1)),
column = rep(NA, length(rs1)), value = rs1, stringsAsFactors = FALSE)
if (nrow(rs) != 0) result[[psb_set[i, 'name']]] <- rs
} else {
obj2 <- obj[sapply(obj, class) == psb_set[i, 'class']]
if (length(obj2) != 0)
obj2 <- obj2[sapply(obj2, function(x) nrow(slot(x, psb_set[i, 'slot'])) != 0)]
rs <- lapply(obj2, function(x) {
slt <- gh[[psb_set[i, 'name']]]@dimSetNames;
if (length(slt) > 1 && slt[1] == substr(slt[2], 1, nchar(slt[2]) - 1))
slt0 <- slt[-2] else slt0 <- slt[-1]
if (psb_set[i, 'type'] == 'multi') {
yy <- slot(x, psb_set[i, 'slot'])
xx <- yy[, slt0]
xlo <- cbind(rbind(xx, xx), value = c(yy[, paste(psb_set[i, 'column'], '.lo', sep = '')],
yy[, paste(psb_set[i, 'column'], '.fx', sep = '')]))
colnames(xlo) <- slt
colnames(xlo)[ncol(xlo)] <- 'value'
xlo <- cbind(parameter = rep(paste(psb_set[i, 'name'], 'Lo', sep = ''), nrow(xlo)),
object = rep(x@name, nrow(xlo)), class = rep(psb_set[i, 'class'], nrow(xlo)),
slot = rep(psb_set[i, 'slot'], nrow(xlo)),
column = rep(psb_set[i, 'column'], nrow(xlo)),
xlo, stringsAsFactors = FALSE)
xup <- cbind(rbind(xx, xx), value = c(yy[, paste(psb_set[i, 'column'], '.up', sep = '')],
yy[, paste(psb_set[i, 'column'], '.fx', sep = '')]))
colnames(xup) <- slt
colnames(xup)[ncol(xup)] <- 'value'
xup <- cbind(parameter = rep(paste(psb_set[i, 'name'], 'Up', sep = ''), nrow(xup)),
object = rep(x@name, nrow(xup)), class = rep(psb_set[i, 'class'], nrow(xup)),
slot = rep(psb_set[i, 'slot'], nrow(xup)),
column = rep(psb_set[i, 'column'], nrow(xup)),
xup, stringsAsFactors = FALSE)
xx <- rbind(xlo, xup)
xx <- xx[!is.na(xx$value),, drop = FALSE]
if (!is.null(column)) xx <- xx[xx$column %in% column,, drop = FALSE]
if (!is.null(parameter)) xx <- xx[xx$parameter %in% parameter,, drop = FALSE]
xx
} else {
xx <- slot(x, psb_set[i, 'slot'])[, c(slt0, psb_set[i, 'column'])]
xx <- xx[!is.na(xx[, psb_set[i, 'column']]),, drop = FALSE]
xx <- cbind(rep(x@name, nrow(xx)), xx, stringsAsFactors = FALSE)
colnames(xx) <- slt
colnames(xx)[ncol(xx)] <- 'value'
xx <- cbind(parameter = rep(psb_set[i, 'name'], nrow(xx)),
object = rep(x@name, nrow(xx)), class = rep(psb_set[i, 'class'], nrow(xx)),
slot = rep(psb_set[i, 'slot'], nrow(xx)),
column = rep(psb_set[i, 'column'], nrow(xx)),
xx, stringsAsFactors = FALSE)
if (!is.null(parameter)) xx <- xx[xx$parameter %in% parameter,, drop = FALSE]
xx
}
})
rs <- rs[sapply(rs, nrow) != 0]
if (length(rs) > 1) {
res <- rs[[1]][0,, drop = FALSE]
res[1:sum(sapply(rs, nrow)), ] <- NA
k <- 0
for(j in seq(along = rs)) {
res[k + 1:nrow(rs[[j]]), ] <- rs[[j]]
k <- k + nrow(rs[[j]])
}
} else if (length(rs) == 1) res <- rs[[1]] else res <- NULL
if (!is.null(res) && length(alias_set) != 0 &&
!any(sapply(alias_set, function(x) any(colnames(res) %in% x)))) {
res <- NULL
}
if (!is.null(res) && length(alias_set) != 0 && any(!sapply(set, is.null))) {
for(k in seq(along = set)) if (!is.null(set[[k]]) && nrow(res) != 0) {
ff <- colnames(res)[colnames(res) %in% alias_set[[gsub('_$', '', names(set)[k])]]]
fl <- is.na(res[, ff[1]])
RT <- any(grep('_$', names(set)[k]))
for(l in ff) {
fl <- fl | is.na(res[, l])
if (RT) {
for(y in set[[k]]) fl[grep(y, res[, l])] <- TRUE
} else {
fl[res[, l] %in% set[[k]]] <- TRUE
}
}
res <- res[fl,, drop = FALSE]
}
}
if (!is.null(res)) result[[psb_set[i, 'name']]] <- res
}
}
}
if (merge) {
if (length(result) > 1) {
if (use.dplyr) {
result <- Reduce(function(x, y) {dplyr::full_join(x, y)}, result)
} else {
result <- Reduce(function(x, y) {merge(x, y, all = TRUE)}, result)
}
result <- cbind(result[, colnames(result) != 'value', drop = FALSE], value = result$value, stringsAsFactors = FALSE)
} else result <- result[[1]]
}
psb_set <<- psb_set
result
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.