Shiny-indicators

library("chron");
library("readr");
library("timevis");
options(chron.origin=c(month=11, day=24, year=-4713));

source("/work/global.R")
#> i Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.

samplesim <- "/work/doc/sample_MF1_2.csv";
simdata <- read.csv(file=samplesim, check.names=FALSE, stringsAsFactors=FALSE);
# Input datas (simulation parameters and outputs)

nplots <- 4
plot_index <- 1;
X0 <- 10;
Y0 <- 10;
Plot_Area <- list(2500, 2500, 2500, 2500);

Plot_Areas <- list(Plot_Areas=Plot_Area, Farm_Area=do.call("sum", Plot_Area))

kc_seq <- structure(list(sequence = c("ex1", "ex2"), padding = c(59, 1), 
    startdate = c("1/3/2014", "2/4/2014"), enddate = c("1/4/2014", 
    "3/5/2014")), row.names = c(NA, -2L), spec = structure(list(
    cols = list(sequence = structure(list(), class = c("collector_character", 
    "collector")), padding = structure(list(), class = c("collector_double", 
    "collector")), startdate = structure(list(), class = c("collector_character", 
    "collector")), enddate = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"));

kc_seqs <- list();
kc_seqs[[1]] <- kc_seq;
kc_seqs[[2]] <- kc_seq;
kc_seqs[[3]] <- kc_seq;
kc_seqs[[4]] <- kc_seq;

kcb_cropindexes <- lapply(1:nplots, function(i){.get_kcb_cropindex_list(i, simdata, kc_seqs[[i]])})
kcb_cropindex <- kcb_cropindexes[[plot_index]]

Description of the Shiny applications indicators

indicators_screenshot

indicators_screenshot


1. Crop Failures count table

.get_indicator_table_fails #> function (simdata, kc_seqs) #> { #> fails_crop1 <- .get_fails(1, simdata, kc_seqs[[1]]) #> fails_crop2 <- .get_fails(2, simdata, kc_seqs[[2]]) #> fails_crop3 <- .get_fails(3, simdata, kc_seqs[[3]]) #> fails_crop4 <- .get_fails(4, simdata, kc_seqs[[4]]) #> fails_farm <- data.frame(Fail_Number = (fails_crop1$Fail_Number + #> fails_crop2$Fail_Number + fails_crop3$Fail_Number + fails_crop4$Fail_Number), #> Total_Crops = (fails_crop1$Total_Crops + fails_crop2$Total_Crops + #> fails_crop3$Total_Crops + fails_crop4$Total_Crops), #> Failed_Crops = NA) #> Fails <- rbind(Farm = fails_farm, fails_crop1, fails_crop2, #> fails_crop3, fails_crop4) #> Fails$"%" <- Fails$Fail_Number/Fails$Total_Crops * 100 #> return(Fails[, c(1, 2, 4, 3)]) #> } #> DT::datatable({.get_fails(plot_index, simdata, kc_seq)})
.get_fails #> function (plot_index, simdata, kc_seq) #> { #> fail_number <- tail(simdata[, paste0("top,FarmModel,Plot_", #> plot_index, ":ClimaticWaterDemand.Failure_counter")], #> 1) #> is_failure <- .get_plot_var(plot_index, simdata, "ClimaticWaterDemand", #> "Is_Failure") #> kcb_cropindex_list <- .get_kcb_cropindex_list(plot_index, #> simdata, kc_seq) #> cropnames <- kcb_cropindex_list$cropname_seq #> if (fail_number > 0) { #> failed_crops <- paste(cropnames[kcb_cropindex_list$cropindex[(c(is_failure[-1], #> 0) > 0)][-2]], collapse = ", ") #> } #> else { #> failed_crops <- NA #> } #> return(data.frame(Fail_Number = fail_number, Total_Crops = length(cropnames), #> Failed_Crops = failed_crops, row.names = paste0("Plot_", #> plot_index))) #> } #>

2. Crop stress boxplots

.get_indicator_boxplot_stress #> function (simdata, kc_seqs, kcb_cropindexes) #> { #> return(rbind(.get_stress(1, simdata, kcb_cropindexes[[1]]), #> .get_stress(2, simdata, kcb_cropindexes[[2]]), .get_stress(3, #> simdata, kcb_cropindexes[[3]]), .get_stress(4, simdata, #> kcb_cropindexes[[4]]))) #> } #> DT::datatable({.get_stress(1, simdata, kcb_cropindexes[[1]])})
.get_stress #> function (plot_index, simdata, kcb_cropindex) #> { #> stress_crop <- .get_plot_var(plot_index, simdata, "WaterFlows", #> "stress_index") #> return(data.frame(stress = stress_crop[kcb_cropindex$cropindex > #> 0], cropindex = paste0("Plot_", plot_index, ".", kcb_cropindex$cropname[kcb_cropindex$cropindex > #> 0]))) #> } #>

3. Crop stress summary table

.get_indicator_table_stress #> function (simdata, kc_seqs, kcb_cropindexes) #> { #> meanstress_crop1 <- .get_meanstress(1, simdata, kcb_cropindexes[[1]]) #> meanstress_crop2 <- .get_meanstress(2, simdata, kcb_cropindexes[[2]]) #> meanstress_crop3 <- .get_meanstress(3, simdata, kcb_cropindexes[[3]]) #> meanstress_crop4 <- .get_meanstress(4, simdata, kcb_cropindexes[[4]]) #> Stress <- c(meanstress_crop1, meanstress_crop2, meanstress_crop3, #> meanstress_crop4) #> Stress_cropindex <- c(rep(1, length(meanstress_crop1)), rep(2, #> length(meanstress_crop2)), rep(3, length(meanstress_crop3)), #> rep(4, length(meanstress_crop4))) #> names(Stress) <- paste0("Plot_", Stress_cropindex, ".", names(Stress)) #> return(as.data.frame(do.call("rbind", Stress))) #> } #> .get_meanstress(plot_index, simdata, kcb_cropindex) #> $ex1 #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.000118 0.002364 0.274517 0.479417 1.000000 1.000000 #> #> $ex2 #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.00332 0.06095 0.13808 0.21884 0.26152 1.00000 .get_meanstress #> function (plot_index, simdata, kcb_cropindex) #> { #> stress_crop <- .get_plot_var(plot_index, simdata, "WaterFlows", #> "stress_index") #> meanstress_crop <- by(stress_crop, as.factor(kcb_cropindex$cropindex), #> summary) #> meanstress_crop <- meanstress_crop[-1] #> names(meanstress_crop) <- kcb_cropindex$cropname_seq #> return(meanstress_crop) #> } #>

4. Crop yield table

.get_indicator_table_yield #> function (simdata, plot_areas, kcb_cropindexes) #> { #> finalyield_crop1 <- .get_finalyield(1, simdata, kcb_cropindexes[[1]]) #> finalyield_crop2 <- .get_finalyield(2, simdata, kcb_cropindexes[[2]]) #> finalyield_crop3 <- .get_finalyield(3, simdata, kcb_cropindexes[[3]]) #> finalyield_crop4 <- .get_finalyield(4, simdata, kcb_cropindexes[[4]]) #> FinalYield <- c(finalyield_crop1, finalyield_crop2, finalyield_crop3, #> finalyield_crop4) #> FinalYield_x_PlotArea <- c(finalyield_crop1 * plot_areas[[1]], #> finalyield_crop2 * plot_areas[[2]], finalyield_crop3 * #> plot_areas[[3]], finalyield_crop4 * plot_areas[[4]])/10000 #> FinalYield_cropindex <- c(rep(1, length(finalyield_crop1)), #> rep(2, length(finalyield_crop2)), rep(3, length(finalyield_crop3)), #> rep(4, length(finalyield_crop4))) #> names(FinalYield) <- paste0("Plot_", FinalYield_cropindex, #> ".", names(FinalYield)) #> return(data.frame(FinalYield, FinalYield_x_PlotArea, row.names = make.names(names(FinalYield), #> unique = TRUE))) #> } #> DT::datatable({data.frame(t(.get_finalyield(plot_index, simdata, kcb_cropindex)))})
.get_finalyield #> function (plot_index, simdata, kcb_cropindex) #> { #> yield_crop <- .get_plot_var(plot_index, simdata, "Yield", #> "Yield") #> failure_crop <- .get_plot_var(plot_index, simdata, "ClimaticWaterDemand", #> "Is_Failure") #> finalyield_crop <- as.numeric(as.character(as.factor(by(yield_crop, #> as.factor(kcb_cropindex$cropindex), tail, n = 1))[-1])) #> finalfailure_crop <- as.numeric(as.character(as.factor(by(failure_crop, #> as.factor(c(0, head(kcb_cropindex$cropindex, n = -1))), #> tail, n = 1))[-1])) #> finalyield_crop <- ifelse(finalfailure_crop, NA, finalyield_crop) #> names(finalyield_crop) <- kcb_cropindex$cropname_seq #> return(finalyield_crop) #> } #>

5. Crop days without water count table

.get_indicator_table_dayswowater #> function (simdata, kcb_cropindexes) #> { #> sumdayswowater_crop1 <- .get_sumdayswowater(1, simdata, kcb_cropindexes[[1]]) #> sumdayswowater_crop2 <- .get_sumdayswowater(2, simdata, kcb_cropindexes[[2]]) #> sumdayswowater_crop3 <- .get_sumdayswowater(3, simdata, kcb_cropindexes[[3]]) #> sumdayswowater_crop4 <- .get_sumdayswowater(4, simdata, kcb_cropindexes[[4]]) #> Sumdayswowater <- cbind(sumdayswowater_crop1, sumdayswowater_crop2, #> sumdayswowater_crop3, sumdayswowater_crop4) #> sumdayswowater_cropindex <- c(rep(1, ncol(sumdayswowater_crop1)), #> rep(2, ncol(sumdayswowater_crop2)), rep(3, ncol(sumdayswowater_crop3)), #> rep(4, ncol(sumdayswowater_crop4))) #> colnames(Sumdayswowater) <- paste0("Plot_", sumdayswowater_cropindex, #> ".", colnames(Sumdayswowater)) #> restable <- data.frame(t(cbind(Farm = rowSums(Sumdayswowater, #> na.rm = TRUE), Plot_1 = rowSums(sumdayswowater_crop1, #> na.rm = TRUE), Plot_2 = rowSums(sumdayswowater_crop2, #> na.rm = TRUE), Plot_3 = rowSums(sumdayswowater_crop3, #> na.rm = TRUE), Plot_4 = rowSums(sumdayswowater_crop4, #> na.rm = TRUE), Sumdayswowater))) #> colnames(restable) <- c("Total Days w/o Water", "Crop Cycle_Duration", #> "Max Consecutive Days w/o Water", "Total Days Irrigation Demand") #> restable$"Max Consecutive Days w/o Water"[1] <- max(restable$"Max Consecutive Days w/o Water"[-1]) #> return(restable) #> } #> DT::datatable({.get_sumdayswowater(plot_index, simdata, kcb_cropindex)})
.get_sumdayswowater #> function (plot_index, simdata, kcb_cropindex) #> { #> dayssowing_crop <- .get_plot_var(plot_index, simdata, "ClimaticWaterDemand", #> "Days_Since_Sowing") #> failure_crop <- .get_plot_var(plot_index, simdata, "ClimaticWaterDemand", #> "Is_Failure") #> finaldayssowing_crop <- as.numeric(as.character(as.factor(by(dayssowing_crop, #> as.factor(kcb_cropindex$cropindex), tail, n = 1))[-1])) #> seqdayswowater <- as.vector(simdata[, paste0("top,FarmModel,IrrigationManager:FarmIrrigationManager.Days_Without_Irrigation_", #> plot_index)]) #> maxseqdays_crop <- as.numeric(as.character(as.factor(by(seqdayswowater, #> as.factor(kcb_cropindex$cropindex), max))[-1])) #> dayswowater_crop <- as.vector(simdata[, paste0("top,FarmModel,IrrigationManager:FarmIrrigationManager.Is_Day_Without_Irrigation_", #> plot_index)]) #> sumdayswowater_crop <- as.numeric(as.character(as.factor(by(dayswowater_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> names(sumdayswowater_crop) <- kcb_cropindex$cropname_seq #> daysIrrigDemand_crop <- as.vector(simdata[, paste0("top,FarmModel,Plot_", #> plot_index, ":IrrigationDemand.IrrigationDemand")] > #> 0) #> sumIrrigDemand_crop <- as.numeric(as.character(as.factor(by(daysIrrigDemand_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> names(sumIrrigDemand_crop) <- kcb_cropindex$cropname_seq #> return(rbind(sumdayswowater_crop, finaldayssowing_crop, maxseqdays_crop, #> sumIrrigDemand_crop)) #> } #>

6. Irrigation volumes table

.get_indicator_table_irrigvol #> function (simdata, kcb_cropindexes, plot_areas) #> { #> sumirrigvol_crop1 <- .get_sumirrigvol(1, simdata, kcb_cropindexes[[1]], #> plot_areas[[1]]) #> sumirrigvol_crop2 <- .get_sumirrigvol(2, simdata, kcb_cropindexes[[2]], #> plot_areas[[2]]) #> sumirrigvol_crop3 <- .get_sumirrigvol(3, simdata, kcb_cropindexes[[3]], #> plot_areas[[3]]) #> sumirrigvol_crop4 <- .get_sumirrigvol(4, simdata, kcb_cropindexes[[4]], #> plot_areas[[4]]) #> Sumirrigvol <- cbind(sumirrigvol_crop1, sumirrigvol_crop2, #> sumirrigvol_crop3, sumirrigvol_crop4) #> sumirrigvol_cropindex <- c(rep(1, ncol(sumirrigvol_crop1)), #> rep(2, ncol(sumirrigvol_crop2)), rep(3, ncol(sumirrigvol_crop3)), #> rep(4, ncol(sumirrigvol_crop4))) #> colnames(Sumirrigvol) <- paste0("Plot_", sumirrigvol_cropindex, #> ".", colnames(Sumirrigvol)) #> restable <- data.frame(t(cbind(Farm = rowSums(Sumirrigvol, #> na.rm = TRUE), Plot_1 = rowSums(sumirrigvol_crop1, na.rm = TRUE), #> Plot_2 = rowSums(sumirrigvol_crop2, na.rm = TRUE), Plot_3 = rowSums(sumirrigvol_crop3, #> na.rm = TRUE), Plot_4 = rowSums(sumirrigvol_crop4, #> na.rm = TRUE), Sumirrigvol))) #> colnames(restable) <- c("Irrigation Amounts (m3)", "from Pump (%)", #> "from Pond (%)", "Irrigation Demand Amounts (m3)") #> vols1 <- rowSums(sweep(sumirrigvol_crop1[-c(1, 4), ], MARGIN = 2, #> sumirrigvol_crop1[1, ], `*`)/100, na.rm = TRUE) #> vols2 <- rowSums(sweep(sumirrigvol_crop2[-c(1, 4), ], MARGIN = 2, #> sumirrigvol_crop2[1, ], `*`)/100, na.rm = TRUE) #> vols3 <- rowSums(sweep(sumirrigvol_crop3[-c(1, 4), ], MARGIN = 2, #> sumirrigvol_crop3[1, ], `*`)/100, na.rm = TRUE) #> vols4 <- rowSums(sweep(sumirrigvol_crop4[-c(1, 4), ], MARGIN = 2, #> sumirrigvol_crop4[1, ], `*`)/100, na.rm = TRUE) #> restable[2:5, -c(1, 4)] <- rbind(vols1/sum(vols1, na.rm = TRUE) * #> 100, vols2/sum(vols2, na.rm = TRUE) * 100, vols3/sum(vols3, #> na.rm = TRUE) * 100, vols4/sum(vols4, na.rm = TRUE) * #> 100) #> restable[1, -c(1, 4)] <- colSums(sweep(restable[2:5, -c(1, #> 4)], MARGIN = 1, restable[2:5, 1], `*`)/100, na.rm = TRUE)/restable[1, #> 1] * 100 #> return(restable) #> } #> DT::datatable({.get_sumirrigvol(plot_index, simdata, kcb_cropindex, Plot_Areas$Plot_Areas[[plot_index]])})
.get_sumirrigvol #> function (plot_index, simdata, kcb_cropindex, plot_area) #> { #> irrigvol_crop <- as.vector(simdata[, paste0("top,FarmModel,IrrigationManager:FarmIrrigationManager.IrrigationAmount_", #> plot_index)]) #> sumirrigvol_crop <- as.numeric(as.character(as.factor(by(irrigvol_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> pumpextraction_crop <- as.vector(simdata[, paste0("top,FarmModel,IrrigationManager:FarmIrrigationManager.PumpExtraction_", #> plot_index)]) #> sumpumpextraction_crop <- as.numeric(as.character(as.factor(by(pumpextraction_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> pondextraction_crop <- as.vector(simdata[, paste0("top,FarmModel,IrrigationManager:FarmIrrigationManager.PondExtraction_", #> plot_index)]) #> sumpondextraction_crop <- as.numeric(as.character(as.factor(by(pondextraction_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> irrigDemandvol_crop <- as.vector(.convert_mm_to_m3(simdata[, #> paste0("top,FarmModel,Plot_", plot_index, ":IrrigationDemand.IrrigationDemand")], #> plot_area)) #> sumirrigDemandvol_crop <- as.numeric(as.character(as.factor(by(irrigDemandvol_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> names(sumirrigvol_crop) <- kcb_cropindex$cropname_seq #> return(rbind(sumirrigvol_crop, sumpumpextraction_crop/sumirrigvol_crop * #> 100, sumpondextraction_crop/sumirrigvol_crop * 100, sumirrigDemandvol_crop)) #> } #>

7. Irrigation timeline


(irrigvol_crop <- rbind(.get_irrigvol_timeline(1, simdata),
                        .get_irrigvol_timeline(2, simdata),
                        .get_irrigvol_timeline(3, simdata),
                        .get_irrigvol_timeline(4, simdata),
                        .get_watercycles_timeline(simdata)));
#>         start        end                     content group subgroup
#> 1  2014-03-02       <NA>            25 m<sup>3</sup>     1        1
#> 2  2014-03-03       <NA>            25 m<sup>3</sup>     1        1
#> 3  2014-03-04       <NA>            25 m<sup>3</sup>     1        1
#> 4  2014-03-05       <NA>            25 m<sup>3</sup>     1        1
#> 5  2014-03-08       <NA>            25 m<sup>3</sup>     1        1
#> 6  2014-03-09       <NA>            25 m<sup>3</sup>     1        1
#> 7  2014-03-10       <NA>            25 m<sup>3</sup>     1        1
#> 8  2014-03-11       <NA>            25 m<sup>3</sup>     1        1
#> 9  2014-03-12       <NA>            25 m<sup>3</sup>     1        1
#> 10 2014-03-13       <NA>            25 m<sup>3</sup>     1        1
#> 11 2014-03-14       <NA>            25 m<sup>3</sup>     1        1
#> 12 2014-03-02       <NA>            25 m<sup>3</sup>     2        1
#> 13 2014-03-03       <NA>            25 m<sup>3</sup>     2        1
#> 14 2014-03-08       <NA>            25 m<sup>3</sup>     2        1
#> 15 2014-03-09       <NA>            25 m<sup>3</sup>     2        1
#> 16 2014-03-10       <NA>            25 m<sup>3</sup>     2        1
#> 17 2014-03-11       <NA>            25 m<sup>3</sup>     2        1
#> 18 2014-03-12       <NA>            25 m<sup>3</sup>     2        1
#> 19 2014-03-02       <NA>            25 m<sup>3</sup>     3        1
#> 20 2014-03-03       <NA>            25 m<sup>3</sup>     3        1
#> 21 2014-03-08       <NA>            25 m<sup>3</sup>     3        1
#> 22 2014-03-09       <NA>            25 m<sup>3</sup>     3        1
#> 23 2014-03-10       <NA>            25 m<sup>3</sup>     3        1
#> 24 2014-03-12       <NA>            25 m<sup>3</sup>     3        1
#> 25 2014-03-02       <NA>            25 m<sup>3</sup>     4        1
#> 26 2014-03-03       <NA>            25 m<sup>3</sup>     4        1
#> 27 2014-03-08       <NA>            25 m<sup>3</sup>     4        1
#> 28 2014-03-09       <NA>            25 m<sup>3</sup>     4        1
#> 29 2014-03-12       <NA>            25 m<sup>3</sup>     4        1
#> 30 2014-03-10 2014-03-12 2 days<br>~67 m<sup>3</sup>     3        2
#> 31 2014-03-12 2014-03-14 2 days<br>~65 m<sup>3</sup>     4        2
timevis(irrigvol_crop, groups = data.frame(id = 1:4, content = paste0("Plot_", 1:4)),  options = list(stack=FALSE, stackSubgroups=FALSE))
DT::datatable({.get_irrigvol_timeline(1, simdata)})
.get_irrigvol_timeline #> function (plot_index, simdata) #> { #> dates_str <- simdata$"top:MeteoReader.current_date_str" #> irrigvol_crop <- as.vector(simdata[, paste0("top,FarmModel,IrrigationManager:FarmIrrigationManager.IrrigationAmount_", #> plot_index)]) #> irrigvol_timeline <- NULL #> if (sum(irrigvol_crop > 0) > 0) { #> irrigvol_timeline <- data.frame(start = dates_str[irrigvol_crop > #> 0], end = NA, content = paste(irrigvol_crop[irrigvol_crop > #> 0], "m3"), group = plot_index, subgroup = 1, #> stringsAsFactors = FALSE) #> } #> return(irrigvol_timeline) #> } #> DT::datatable({.get_watercycles_timeline(simdata)})
.get_watercycles_timeline #> function (simdata) #> { #> WC_duration <- as.vector(simdata[, "top,FarmModel,IrrigationManager:FarmIrrigationManager.WaterCycle_Duration"]) #> WC_startindex <- which(diff(sign(diff(WC_duration))) == -2) + #> 1 #> dates_str <- simdata$"top:MeteoReader.current_date_str"[WC_startindex] #> WC_plotindex <- as.vector(simdata[WC_startindex, "top,FarmModel,IrrigationManager:FarmIrrigationManager.WaterCycle_CurrentPlot"] + #> 1) #> WC_currentdose <- as.vector(simdata[WC_startindex, "top,FarmModel,IrrigationManager:FarmIrrigationManager.WaterCycle_CurrentDose"]) #> simdata$dates <- dates(simdata$"top:MeteoReader.current_date_str", #> format = c(dates = "y-m-d")) #> WC_timeline <- NULL #> if (sum(WC_duration) > 0) { #> WC_timeline <- data.frame(start = dates_str, end = as.character(as.Date(as.character(simdata$dates[WC_startindex] + #> WC_duration[WC_startindex] + 1), format = "%m/%d/%y")), #> content = paste0(WC_duration[WC_startindex] + 1, #> " days
~", round(WC_currentdose), " m3"), #> group = WC_plotindex, subgroup = 2, stringsAsFactors = FALSE) #> } #> return(WC_timeline) #> } #>

8. Water Use Efficiency (WUE) - Irrigation

.get_indicator_table_wue_irrig #> function (simdata, kcb_cropindexes) #> { #> wue_irrig_crop1 <- .get_wue_irrig(1, simdata, kcb_cropindexes[[1]]) #> wue_irrig_crop2 <- .get_wue_irrig(2, simdata, kcb_cropindexes[[2]]) #> wue_irrig_crop3 <- .get_wue_irrig(3, simdata, kcb_cropindexes[[3]]) #> wue_irrig_crop4 <- .get_wue_irrig(4, simdata, kcb_cropindexes[[4]]) #> Wue_irrig <- c(wue_irrig_crop1, wue_irrig_crop2, wue_irrig_crop3, #> wue_irrig_crop4) #> wue_irrig_cropindex <- c(rep(1, length(wue_irrig_crop1)), #> rep(2, length(wue_irrig_crop2)), rep(3, length(wue_irrig_crop3)), #> rep(4, length(wue_irrig_crop4))) #> names(Wue_irrig) <- paste0("Plot_", wue_irrig_cropindex, #> ".", names(Wue_irrig)) #> return(data.frame(WUE_Irrigation = Wue_irrig, row.names = make.names(names(Wue_irrig), #> unique = TRUE))) #> } #> DT::datatable({data.frame(t(.get_wue_irrig(plot_index, simdata, kcb_cropindex)))})
.get_wue_irrig #> function (plot_index, simdata, kcb_cropindex) #> { #> ActualTransp_crop <- as.vector(simdata[, paste0("top,FarmModel,Plot_", #> plot_index, ":WaterFlows.Actual_transp")]) #> sumAT_crop <- as.numeric(as.character(as.factor(by(ActualTransp_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> RainIrrig_crop <- as.vector(simdata[, "top:MeteoReader.Rain"]) + #> as.vector(simdata[, paste0("top,FarmModel,IrrigationManager:FarmIrrigationManager.Irrigation_", #> plot_index)]) #> sumRainIrrig_crop <- as.numeric(as.character(as.factor(by(RainIrrig_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> wue_irrig_crop <- sumAT_crop/sumRainIrrig_crop #> names(wue_irrig_crop) <- kcb_cropindex$cropname_seq #> return(wue_irrig_crop) #> } #>

9. Water Use Efficiency (WUE) - Crop

.get_indicator_table_wue_crop #> function (simdata, kcb_cropindexes) #> { #> wue_crop_crop1 <- .get_wue_crop(1, simdata, kcb_cropindexes[[1]]) #> wue_crop_crop2 <- .get_wue_crop(2, simdata, kcb_cropindexes[[2]]) #> wue_crop_crop3 <- .get_wue_crop(3, simdata, kcb_cropindexes[[3]]) #> wue_crop_crop4 <- .get_wue_crop(4, simdata, kcb_cropindexes[[4]]) #> Wue_crop <- c(wue_crop_crop1, wue_crop_crop2, wue_crop_crop3, #> wue_crop_crop4) #> wue_crop_cropindex <- c(rep(1, length(wue_crop_crop1)), rep(2, #> length(wue_crop_crop2)), rep(3, length(wue_crop_crop3)), #> rep(4, length(wue_crop_crop4))) #> names(Wue_crop) <- paste0("Plot_", wue_crop_cropindex, ".", #> names(Wue_crop)) #> return(data.frame(Wue_crop = Wue_crop, row.names = make.names(names(Wue_crop), #> unique = TRUE))) #> } #> DT::datatable({data.frame(t(.get_wue_crop(plot_index, simdata, kcb_cropindex)))})
.get_wue_crop #> function (plot_index, simdata, kcb_cropindex) #> { #> ActualETR_crop <- as.vector(simdata[, paste0("top,FarmModel,Plot_", #> plot_index, ":WaterFlows.Actual_transp")]) + as.vector(simdata[, #> paste0("top,FarmModel,Plot_", plot_index, ":WaterFlows.Actual_evap")]) #> sumETR_crop <- as.numeric(as.character(as.factor(by(ActualETR_crop, #> as.factor(kcb_cropindex$cropindex), sum))[-1])) #> Yield_crop <- .get_finalyield(plot_index, simdata, kcb_cropindex) #> wue_crop <- Yield_crop/sumETR_crop #> names(wue_crop) <- kcb_cropindex$cropname_seq #> return(wue_crop) #> } #> DT::datatable({data.frame(t(.get_finalyield(plot_index, simdata, kcb_cropindex)))})
.get_finalyield #> function (plot_index, simdata, kcb_cropindex) #> { #> yield_crop <- .get_plot_var(plot_index, simdata, "Yield", #> "Yield") #> failure_crop <- .get_plot_var(plot_index, simdata, "ClimaticWaterDemand", #> "Is_Failure") #> finalyield_crop <- as.numeric(as.character(as.factor(by(yield_crop, #> as.factor(kcb_cropindex$cropindex), tail, n = 1))[-1])) #> finalfailure_crop <- as.numeric(as.character(as.factor(by(failure_crop, #> as.factor(c(0, head(kcb_cropindex$cropindex, n = -1))), #> tail, n = 1))[-1])) #> finalyield_crop <- ifelse(finalfailure_crop, NA, finalyield_crop) #> names(finalyield_crop) <- kcb_cropindex$cropname_seq #> return(finalyield_crop) #> } #>

10. Water Use Efficiency (WUE) - Environment

.get_indicator_table_wue_env #> function (simdata) #> { #> years_index <- as.factor(as.numeric(as.character(years(simdata$dates))) - #> as.numeric(months(simdata$dates, abbreviate = TRUE) < #> "Apr")) #> Rain_crop <- as.vector(simdata[, "top:MeteoReader.Rain"]) #> ET0_crop <- as.vector(simdata[, "top:MeteoReader.ETP"]) #> mean_Rain <- mean(Rain_crop, na.rm = TRUE) #> mean_ET0 <- mean(ET0_crop, na.rm = TRUE) #> Budyko <- sqrt((1 - exp(-mean_ET0/mean_Rain) * mean_ET0/mean_Rain/tanh(mean_ET0/mean_Rain))) #> mean_Rain_year <- as.numeric(as.character(as.factor(by(Rain_crop, #> years_index, mean)))) #> wue_env_plot1 <- .get_wue_env(1, simdata, years_index, mean_Rain_year, #> Budyko) #> wue_env_plot2 <- .get_wue_env(2, simdata, years_index, mean_Rain_year, #> Budyko) #> wue_env_plot3 <- .get_wue_env(3, simdata, years_index, mean_Rain_year, #> Budyko) #> wue_env_plot4 <- .get_wue_env(4, simdata, years_index, mean_Rain_year, #> Budyko) #> Wue_env <- c(wue_env_plot1, wue_env_plot2, wue_env_plot3, #> wue_env_plot4) #> wue_env_plotindex <- c(rep(1, length(wue_env_plot1)), rep(2, #> length(wue_env_plot2)), rep(3, length(wue_env_plot3)), #> rep(4, length(wue_env_plot4))) #> names(Wue_env) <- paste0("Plot_", wue_env_plotindex, ".", #> names(Wue_env)) #> Wue_env_farm <- as.numeric(by(Wue_env, rep(levels(years_index), #> 4), mean)) #> names(Wue_env_farm) <- paste0("Farm.", paste0("[1st April ", #> levels(years_index), " - 31th march ", as.numeric(as.character(levels(years_index))) + #> 1, "]")) #> return(data.frame(Wue_env = c(Wue_env_farm, Wue_env))) #> } #> years_index <- as.factor(as.numeric(as.character(years(simdata$dates))) - as.numeric(months(simdata$dates)<"Apr")) Rain_crop <- as.vector(simdata[,"top:MeteoReader.Rain"]) ET0_crop <- as.vector(simdata[,"top:MeteoReader.ETP"]) mean_Rain <- mean(Rain_crop, na.rm = TRUE) mean_ET0 <- mean(ET0_crop, na.rm = TRUE) budyko <- sqrt((1. - exp(-mean_ET0/mean_Rain)* mean_ET0/mean_Rain / tanh(mean_ET0/mean_Rain))) mean_rain_year <- as.numeric(as.character(as.factor(by(Rain_crop, years_index, mean)))); DT::datatable({data.frame(t(.get_wue_env(plot_index, simdata, years_index, mean_rain_year, budyko)))})
.get_wue_env #> function (plot_index, simdata, years_index, mean_rain_year, budyko) #> { #> ActualETR_crop <- as.vector(simdata[, paste0("top,FarmModel,Plot_", #> plot_index, ":WaterFlows.Actual_transp")]) + as.vector(simdata[, #> paste0("top,FarmModel,Plot_", plot_index, ":WaterFlows.Actual_evap")]) #> mean_ActualETR_year <- as.numeric(as.character(as.factor(by(ActualETR_crop, #> years_index, mean)))) #> Budyko_year <- (mean_ActualETR_year/mean_rain_year - budyko)/budyko #> names(Budyko_year) <- paste0("[1st April ", levels(years_index), #> " - 31th march ", as.numeric(as.character(levels(years_index))) + #> 1, "]") #> return(Budyko_year) #> } #>