# This function might need to measure the absolute difference here?
CalcDifTo90 <- function(result) {
res_list <- matrix(0, dim(result)[1], 5)
colnames(res_list) <- c("sim", "90", "90-90", "90-90-90", "total")
for (i in 1:dim(result)[1]) {
out <- rep(0, 5)
out[1] <- i
out[2] <- result[i,"90"] - 0.9
out[3] <- result[i,"90-90"] - 0.9
out[4] <- result[i,"90-90-90"] - 0.9
out[5] <- sum(out[2], out[3], out[4])
res_list[i,] <- out
}
return(res_list)
}
QuickRouteTo909090 <- function(result) {
# order 90-90-90 by the sum of distance to 90%
int <- result[order(-result[,"total"]),]
# Identify simulation closest to the 90% mark.
x <- 1
while (int[[x, "90"]] > 0 & int[[x, "90-90"]] > 0 & int[[x, "90-90-90"]] > 0) {x <- x + 1}
if (x == 1) {
int[[x, "sim"]]
} else {
int[[x - 1, "sim"]]
}
}
CanWeAchieve909090 <- function(result) {
if (max(result[,"90"]) >= 0.9) {
if (max(result[,"90-90"]) >= 0.9) {
if (max(result[,"90-90-90"]) >= 0.9) {
return(TRUE)
} else {
return(FALSE)
}
} else {
return(FALSE)
}
} else {
return(FALSE)
}
}
Get909090 <- function(result) {
if (CanWeAchieve909090(result)) {
message("Achieved 90-90-90 - showing cheapest route.")
# Then subset the results that hit 90-90-90 and pass out the cheapest solution.
first <- subset(result, result[,"90"] >= 0.9)
second <- subset(first, first[,"90-90"] >= 0.9)
third <- subset(second, second[,"90-90-90"] >= 0.9)
# Return results of simulation (inc parameter values) for cheapest to achieve 90-90-90
third[order(third[,"Cost"]),][1,]
} else {
message("Failed 90-90-90 - showing closest.")
# Update ValueBoxes???
res_list <- CalcDifTo90(result)
result[QuickRouteTo909090(res_list),]
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.