Difference between revisions of "OpasnetUtils/Apply.decisions"
From Testiwiki
m |
m |
||
Line 19: | Line 19: | ||
label="Initiate functions" | label="Initiate functions" | ||
graphics="1" | graphics="1" | ||
+ | showcode="1" | ||
> | > | ||
# APPLY.DECISIONS ############## apply.decisions takes a decision table and applies that to an assessment. | # APPLY.DECISIONS ############## apply.decisions takes a decision table and applies that to an assessment. |
Revision as of 10:48, 15 June 2012
This page is a method.
The page identifier is Op_en5719 |
---|
Moderator:Nobody (see all) Click here to sign up. |
This page is a stub. You may improve it into a full page, and then a rating bar will appear here. |
Upload data
|
Similar to
Description
apply.decisions takes a decision table and applies that to an assessment.
Parameters
- dec is a decision data.frame that must have columns Decision, Option, Variable, Cell, Change, Result. It can have several variables.
Code
# APPLY.DECISIONS ############## apply.decisions takes a decision table and applies that to an assessment. ## dec is a decision data.frame that must have columns Decision, Option, Variable, Cell, Change, Result. It can have several variables. apply.decisions <- function(assessment) { dec <- merge(assessment@decisions, assessment@dependencies, by.x = "Variable", by.y = "Name") colnames(dec)[colnames(dec) == "Result.x"] <- "Result" colnames(dec)[colnames(dec) == "Result.y"] <- "Name" for(variables in unique(dec$Name)) { # Take one variable at a time. dec.var <- dec[dec$Name == variables, ] # dec.var = variable-specific decisions scenarios <- data.frame(temp = 1) for(decisions in unique(dec.var$Decision)) { # Add BAU option to each decision and merge decisions. temp <- as.character(dec.var[dec.var$Decision == decisions, "Option"]) temp <- data.frame(Options = c(temp, "BAU")) colnames(temp) <- decisions scenarios <- merge(scenarios, temp) } var <- assessment@vars[[variables]]# as.character(dec$Name[1])]] var@output <- merge(scenarios[colnames(scenarios) != "temp"], var@output) for(s in 1:nrow(dec.var)) { # Each option row handled separately cell <- gsub("^[ \t]+|[ \t]+$", "", as.character(dec.var$Cell[s])) # Leading and trailing whitespaces removed. cell <- gsub(":[ \t]+", ":", cell) # Whitespaces removed after : cell <- gsub(";[ \t]+", ";", cell) # Whitespaces removed after ; cell <- gsub("[ \t]+:", ":", cell) # Whitespaces removed before : cell <- gsub("[ \t]+;", ";", cell) # Whitespaces removed before ; cell <- strsplit(cell, split = ";") # Separate cell identifiers (indices and locations) cell <- strsplit(cell[[1]], split = ":") cond <- as.character(dec.var$Decision[s]) cond <- var@output[, cond] == as.character(dec.var$Option[s]) # Only the rows with the relevant option. for(r in 1:length(cell)) { # All Cell conditions extracted and combined with AND. cond <- cond * (var@output[, cell[[r]][1]] == cell[[r]][2]) } cond <- as.logical(cond) if(dec.var$Change[s] == "Replace" ) {var@output[cond, "Result"] <- dec.var$Result[s]} if(dec.var$Change[s] == "Add" ) {var@output[cond, "Result"] <- as.numeric(dec.var$Result[s]) + var@output[cond, "Result"]} if(dec.var$Change[s] == "Multiply") {var@output[cond, "Result"] <- as.numeric(dec.var$Result[s]) * var@output[cond, "Result"]} } assessment@vars[[variables]] <- var } return(assessment) } |