arguments

The ahle_sr function from here https://github.com/stephen-wh-kwok/testing/blob/main/ahle_sr.R is broken down to demonstrate the result of each step. The arguments in ahle_sr now are set as objects in the global environment. For the definition of arguments pls refer to the .Rd earlier.

file: the directory of the Excel file

sheet: which sheet

par_names: name of the column which contains names of the parameters

ignore: which column(s) to ignore

nruns: number of runs (number of samplings)

Num_months: number of months

baseline_scen: which scenario to run as a baseline scenario. If NULL, all scenarios will be run.

control_scen: which scenario should be run as a control (comparison) scenario. One only. If NULL, no control scenario is specified.

ill_month: which month(s) in Num_months should run the control scenario, otherwise the baseline scenario will be used.

# ahle_sr <- function(
    
file="D:/Users/SK/Documents/gbad/AHLE scenario parameters-20221202.xlsx";
file
## [1] "D:/Users/SK/Documents/gbad/AHLE scenario parameters-20221202.xlsx"
sheet = 1; 
sheet
## [1] 1
par_names = "AHLE Parameter"; 
par_names
## [1] "AHLE Parameter"
ignore = "Notes"; 
ignore
## [1] "Notes"
nruns = 1; 
nruns
## [1] 1
Num_months = 1; 
Num_months
## [1] 1
baseline_scen = "CLM_S_Current";
baseline_scen
## [1] "CLM_S_Current"
control_scen = NULL; 
control_scen
## NULL
ill_month = NULL
ill_month
## NULL
# ){

load packages

if (!require("pacman")) install.packages("pacman")
## Loading required package: pacman
## Warning: package 'pacman' was built under R version 4.3.1
pacman::p_load("tidyverse", "readxl", "freedom", "truncnorm","data.table", "doParallel", "abind")

makeCluster

https://www.rdocumentation.org/packages/parallel/versions/3.6.2/topics/makeCluster

cl = (detectCores() *.94) %>% floor %>% makeCluster
cl
## socket cluster with 120 nodes on host 'localhost'

registerDoParallel

https://www.rdocumentation.org/packages/doParallel/versions/1.0.17/topics/registerDoParallel

registerDoParallel(cl)

create character vectors for age and sex labels

age = c("N", "J", "A"); 
age
## [1] "N" "J" "A"
sex = c("F", "M"); 
sex
## [1] "F" "M"
cats = c(age, sex) 
cats
## [1] "N" "J" "A" "F" "M"

expand_grid

https://tidyr.tidyverse.org/reference/expand_grid.html

.g = expand_grid(age,sex)
.g
## # A tibble: 6 × 2
##   age   sex  
##   <chr> <chr>
## 1 N     F    
## 2 N     M    
## 3 J     F    
## 4 J     M    
## 5 A     F    
## 6 A     M

create character vector for age-sex labels

.t = paste0(.g$age,.g$sex) 
.t
## [1] "NF" "NM" "JF" "JM" "AF" "AM"

create a list of labels for age-sex

These labels will be the object names of the populations by age-sex.

.p = paste0(".", .t) %>% as.list
.p
## [[1]]
## [1] ".NF"
## 
## [[2]]
## [1] ".NM"
## 
## [[3]]
## [1] ".JF"
## 
## [[4]]
## [1] ".JM"
## 
## [[5]]
## [1] ".AF"
## 
## [[6]]
## [1] ".AM"

binary values to indicate whether a category satisfies a condition.

Create a list of lists of binary values to indicate whether an age-sex category satisfies a condition. The six age-sex categories are in the .t object. The conditions are in the cats objects.

.l = map(cats, function(x) map(.t, function(y) grepl(x, y) %>% sum))
.l
## [[1]]
## [[1]][[1]]
## [1] 1
## 
## [[1]][[2]]
## [1] 1
## 
## [[1]][[3]]
## [1] 0
## 
## [[1]][[4]]
## [1] 0
## 
## [[1]][[5]]
## [1] 0
## 
## [[1]][[6]]
## [1] 0
## 
## 
## [[2]]
## [[2]][[1]]
## [1] 0
## 
## [[2]][[2]]
## [1] 0
## 
## [[2]][[3]]
## [1] 1
## 
## [[2]][[4]]
## [1] 1
## 
## [[2]][[5]]
## [1] 0
## 
## [[2]][[6]]
## [1] 0
## 
## 
## [[3]]
## [[3]][[1]]
## [1] 0
## 
## [[3]][[2]]
## [1] 0
## 
## [[3]][[3]]
## [1] 0
## 
## [[3]][[4]]
## [1] 0
## 
## [[3]][[5]]
## [1] 1
## 
## [[3]][[6]]
## [1] 1
## 
## 
## [[4]]
## [[4]][[1]]
## [1] 1
## 
## [[4]][[2]]
## [1] 0
## 
## [[4]][[3]]
## [1] 1
## 
## [[4]][[4]]
## [1] 0
## 
## [[4]][[5]]
## [1] 1
## 
## [[4]][[6]]
## [1] 0
## 
## 
## [[5]]
## [[5]][[1]]
## [1] 0
## 
## [[5]][[2]]
## [1] 1
## 
## [[5]][[3]]
## [1] 0
## 
## [[5]][[4]]
## [1] 1
## 
## [[5]][[5]]
## [1] 0
## 
## [[5]][[6]]
## [1] 1

name the lists in the .l object.

Each list in the list of lists is given a name to indicate which condition was tested. n, j, a, f, m are neonates, juveniles, adults, females, males, respectively.

names(.l) <- cats %>% tolower %>% paste0(".", .)
.l
## $.n
## $.n[[1]]
## [1] 1
## 
## $.n[[2]]
## [1] 1
## 
## $.n[[3]]
## [1] 0
## 
## $.n[[4]]
## [1] 0
## 
## $.n[[5]]
## [1] 0
## 
## $.n[[6]]
## [1] 0
## 
## 
## $.j
## $.j[[1]]
## [1] 0
## 
## $.j[[2]]
## [1] 0
## 
## $.j[[3]]
## [1] 1
## 
## $.j[[4]]
## [1] 1
## 
## $.j[[5]]
## [1] 0
## 
## $.j[[6]]
## [1] 0
## 
## 
## $.a
## $.a[[1]]
## [1] 0
## 
## $.a[[2]]
## [1] 0
## 
## $.a[[3]]
## [1] 0
## 
## $.a[[4]]
## [1] 0
## 
## $.a[[5]]
## [1] 1
## 
## $.a[[6]]
## [1] 1
## 
## 
## $.f
## $.f[[1]]
## [1] 1
## 
## $.f[[2]]
## [1] 0
## 
## $.f[[3]]
## [1] 1
## 
## $.f[[4]]
## [1] 0
## 
## $.f[[5]]
## [1] 1
## 
## $.f[[6]]
## [1] 0
## 
## 
## $.m
## $.m[[1]]
## [1] 0
## 
## $.m[[2]]
## [1] 1
## 
## $.m[[3]]
## [1] 0
## 
## $.m[[4]]
## [1] 1
## 
## $.m[[5]]
## [1] 0
## 
## $.m[[6]]
## [1] 1

import dataset

data = read_excel(file, sheet)
 
#head(data)

str(data)
## tibble [119 × 242] (S3: tbl_df/tbl/data.frame)
##  $ AHLE Parameter                   : chr [1:119] "Num_months" "# Initial population" "N_NF_t0" "N_NM_t0" ...
##  $ Notes                            : chr [1:119] NA NA "# Neonatal female" "# Neonatal male" ...
##  $ CLM_S_Current                    : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_Ideal                      : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_all_mortality_zero         : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_all_mort_25_imp            : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_all_mort_50_imp            : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_all_mort_75_imp            : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mortality_zero_N           : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mortality_zero_J           : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mortality_zero_AF          : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mortality_zero_AM          : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_25_imp_N              : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_50_imp_N              : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_75_imp_N              : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_25_imp_J              : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_50_imp_J              : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_75_imp_J              : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_25_imp_AF             : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_50_imp_AF             : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_75_imp_AF             : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_25_imp_AM             : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_50_imp_AM             : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_mort_75_imp_AM             : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_ideal_NF                   : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_ideal_NM                   : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_ideal_JF                   : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_ideal_JM                   : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_ideal_AF                   : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_S_ideal_AM                   : chr [1:119] "12" NA "2070822" "2070822" ...
##  $ CLM_G_Current                    : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_Ideal                      : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_all_mortality_zero         : chr [1:119] "12" NA "2803178" "10864998" ...
##  $ CLM_G_all_mort_25_imp            : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_all_mort_50_imp            : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_all_mort_75_imp            : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mortality_zero_N           : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mortality_zero_J           : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mortality_zero_AF          : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mortality_zero_AM          : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_25_imp_N              : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_50_imp_N              : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_75_imp_N              : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_25_imp_J              : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_50_imp_J              : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_75_imp_J              : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_25_imp_AF             : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_50_imp_AF             : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_75_imp_AF             : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_25_imp_AM             : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_50_imp_AM             : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_mort_75_imp_AM             : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_ideal_NF                   : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_ideal_NM                   : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_ideal_JF                   : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_ideal_JM                   : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_ideal_AF                   : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ CLM_G_ideal_AM                   : chr [1:119] "12" NA "2803178" "2586971" ...
##  $ Past_S_Current                   : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_Ideal                     : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_all_mortality_zero        : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_all_mort_25_imp           : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_all_mort_50_imp           : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_all_mort_75_imp           : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mortality_zero_N          : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mortality_zero_J          : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mortality_zero_AF         : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mortality_zero_AM         : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_25_imp_N             : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_50_imp_N             : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_75_imp_N             : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_25_imp_J             : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_50_imp_J             : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_75_imp_J             : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_25_imp_AF            : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_50_imp_AF            : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_75_imp_AF            : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_25_imp_AM            : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_50_imp_AM            : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_mort_75_imp_AM            : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_ideal_NF                  : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_ideal_NM                  : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_ideal_JF                  : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_ideal_JM                  : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_ideal_AF                  : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_S_ideal_AM                  : chr [1:119] "12" NA "1805806" "1212609" ...
##  $ Past_G_Current                   : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_Ideal                     : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_all_mortality_zero        : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_all_mort_25_imp           : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_all_mort_50_imp           : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_all_mort_75_imp           : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_mortality_zero_N          : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_mortality_zero_J          : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_mortality_zero_AF         : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_mortality_zero_AM         : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_mort_25_imp_N             : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_mort_50_imp_N             : chr [1:119] "12" NA "2931658" "1974212" ...
##  $ Past_G_mort_75_imp_N             : chr [1:119] "12" NA "2931658" "1974212" ...
##   [list output truncated]

update baseline_scen

If baseline_scen = NULL, all scenario names will form a character vector and overwrite this argument. Otherwise, it is unchanged.

if(is.null(baseline_scen)){
  
  baseline_scen = names(data) %>% . [ !. %in% c(par_names, ignore)] 
  
} else baseline_scen = baseline_scen

baseline_scen
## [1] "CLM_S_Current"

f_scen

In https://github.com/stephen-wh-kwok/testing/blob/main/ahle_sr.R the f_scen function was created to allow NULL as an input for scen argument, which is applicable when control_scen = NULL. In the current exercise, new objects will be created without a function as baseline_scen and control_scen are fixed.

# f_scen = function(scen){
# 
# if(is.null(scen)) {
# 
# 
# par = NULL 
# 
# 
# } else {
# 
# par =

select columns

Select the column containing names of “production parameters” and the column of the scenario.

b_scen = select(data, all_of(c(par_names, baseline_scen))) #%>%

#b_scen %>% head

b_scen %>% str
## tibble [119 × 2] (S3: tbl_df/tbl/data.frame)
##  $ AHLE Parameter: chr [1:119] "Num_months" "# Initial population" "N_NF_t0" "N_NM_t0" ...
##  $ CLM_S_Current : chr [1:119] "12" NA "2070822" "2070822" ...

transpose the data frame

b_scen = transpose(b_scen, make.names = par_names) #%>%

#b_scen %>% head

b_scen %>% str
## 'data.frame':    1 obs. of  119 variables:
##  $ Num_months                                                                                         : chr "12"
##  $ # Initial population                                                                               : chr NA
##  $ N_NF_t0                                                                                            : chr "2070822"
##  $ N_NM_t0                                                                                            : chr "2070822"
##  $ N_JF_t0                                                                                            : chr "1915971"
##  $ N_JM_t0                                                                                            : chr "1147386"
##  $ N_AF_t0                                                                                            : chr "14049629"
##  $ N_AM_t0                                                                                            : chr "3048715"
##  $ NA                                                                                                 : chr NA
##  $ ## Growth rate N -> J and J-> A                                                                    : chr NA
##  $ Beta                                                                                               : chr "0.16666666666666666"
##  $ NA                                                                                                 : chr NA
##  $ # Fertility                                                                                        : chr NA
##  $ part                                                                                               : chr "rpert(10000, 0.52, 0.67, 0.60)"
##  $ prolif                                                                                             : chr "rtruncnorm(10000, 0, 3, 1.3, 0.15)"
##  $ NA                                                                                                 : chr NA
##  $ # lactation                                                                                        : chr NA
##  $ prop_F_milked                                                                                      : chr "0"
##  $ lac_duration                                                                                       : chr "0"
##  $ avg_daily_yield_ltr                                                                                : chr "0"
##  $ milk_value_ltr                                                                                     : chr "0"
##  $ NA                                                                                                 : chr NA
##  $ # Offtake                                                                                          : chr NA
##  $ ## Currently fixed, but, should this be dependant on new pop size, to keep pop size as it was at t0: chr NA
##  $ ## offtake must = offtake + dif between NNFt0 etc and NJF current                                  : chr NA
##  $ GammaF                                                                                             : chr "3.3333333333333335E-3"
##  $ GammaM                                                                                             : chr "4.5000000000000005E-2"
##  $ NA                                                                                                 : chr NA
##  $ # Mortality ## informed from META analysis                                                         : chr NA
##  $ AlphaN                                                                                             : chr "rpert(1000, 0.09/6, 0.49/6, 0.2/6)"
##  $ AlphaJ                                                                                             : chr "rpert(1000, 0.03/6, 0.30/6, 0.07/6)"
##  $ AlphaF                                                                                             : chr "rpert(1000, 0.02/12, 0.13/12, 0.05/12)"
##  $ AlphaM                                                                                             : chr "rpert(1000, 0.02/12, 0.17/12, 0.06/12)"
##  $ NA                                                                                                 : chr NA
##  $ # Culls                                                                                            : chr NA
##  $ CullF                                                                                              : chr "9.2592592592592587E-3"
##  $ CullM                                                                                              : chr "2.0833333333333332E-2"
##  $ NA                                                                                                 : chr NA
##  $ ## Production parameters (kg)                                                                      : chr NA
##  $ NA                                                                                                 : chr NA
##  $ # Liveweight conversion (kg) ## Informed from META analysis                                        : chr NA
##  $ lwNF                                                                                               : chr "rtruncnorm(10000, a = 1, b = 15, mean = 11.7, sd = 2.2)"
##  $ lwNM                                                                                               : chr "rtruncnorm(10000, a = 1, b = 15, mean =11.7, sd = 2.2)"
##  $ lwJF                                                                                               : chr "rnorm(10000, 21.1, sd = 3.8)"
##  $ lwJM                                                                                               : chr "rnorm(10000, 21.1, sd = 3.8)"
##  $ lwAF                                                                                               : chr "rnorm(10000, 28.6, sd = 4.1)"
##  $ lwAM                                                                                               : chr "rnorm(10000, 31.5, sd = 6.8)"
##  $ NA                                                                                                 : chr NA
##  $ # carcase yeild                                                                                    : chr NA
##  $ ccy                                                                                                : chr "0.42"
##  $ NA                                                                                                 : chr NA
##  $ ## Financial value of live animals                                                                 : chr NA
##  $ # Ethiopian Birr                                                                                   : chr NA
##  $ fvNF                                                                                               : chr "rpert(10000, 839, 1676, 1385)"
##  $ fvJF                                                                                               : chr "rpert(10000, 1246, 4300, 2120)"
##  $ fvAF                                                                                               : chr "rpert(10000, 2400, 4013, 2890)"
##  $ fvNM                                                                                               : chr "rpert(10000, 839, 1676, 1385)"
##  $ fvJM                                                                                               : chr "rpert(10000, 1246, 5949, 2541)"
##  $ fvAM                                                                                               : chr "rpert(10000, 2341, 8413, 4036)"
##  $ NA                                                                                                 : chr NA
##  $ ## Off take which go for fertility in females (used when calculating hide numbers)                 : chr NA
##  $ #fert_offtake                                                                                      : chr "0.25"
##  $ NA                                                                                                 : chr NA
##  $ ## skin/hides                                                                                      : chr NA
##  $ ## parameters can be updated through expert opinion but adding options for flexibility here        : chr NA
##  $ hides_rate                                                                                         : chr "1"
##  $ hides_rate_mor                                                                                     : chr "0.5"
##  $ NA                                                                                                 : chr NA
##  $ # 1 usd per piece = 51 eth birr                                                                    : chr NA
##  $ hides_value                                                                                        : chr "40"
##  $ NA                                                                                                 : chr NA
##  $ # manure rate (kg produced/animal/day)                                                             : chr NA
##  $ Man_N                                                                                              : chr "0.1"
##  $ Man_J                                                                                              : chr "0.2"
##  $ Man_A                                                                                              : chr "0.3"
##  $ NA                                                                                                 : chr NA
##  $ # 0.0125 USD / kg = 0.65 eth birr per kg 2021 price                                                : chr NA
##  $ Man_value                                                                                          : chr "0.5"
##  $ NA                                                                                                 : chr NA
##  $ ## dry matter requirements as proportion of liveweight                                             : chr NA
##  $ DM_req_prpn_NF                                                                                     : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_NM                                                                                     : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_JF                                                                                     : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_JM                                                                                     : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_AF                                                                                     : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_AM                                                                                     : chr "2.5999999999999999E-2"
##  $ NA                                                                                                 : chr NA
##  $ ## Proportion of livestock keepers that spend any money on feed                                    : chr NA
##  $ ## NOTE Currently the same for all age*sex groups                                                  : chr NA
##  $ prpn_lskeepers_purch_feed                                                                          : chr "0.25"
##  $ NA                                                                                                 : chr NA
##  $ ## For those spending any money on feed, the proportion of feed that is purchased                  : chr NA
##  $ ## NOTE Currently the same for all age*sex groups                                                  : chr NA
##  $ prpn_feed_paid_for                                                                                 : chr "0.5"
##  $ NA                                                                                                 : chr NA
##  $ ## Input parameters ## just example distributions for now                                          : chr NA
##  $ Feed_cost_kg                                                                                       : chr "rpert(10000, 2.5, 6.5, 3.46)"
##  $ NA                                                                                                 : chr NA
##  $ ## variable results for the amount of dry matter in wheat and barley and tef in Ethiopia           : chr NA
##   [list output truncated]

remove empty columns

b_scen = b_scen [ , (colSums(is.na(b_scen))/nrow(b_scen)) < .5] #%>% 

#b_scen %>% head

b_scen %>% str
## 'data.frame':    1 obs. of  58 variables:
##  $ Num_months               : chr "12"
##  $ N_NF_t0                  : chr "2070822"
##  $ N_NM_t0                  : chr "2070822"
##  $ N_JF_t0                  : chr "1915971"
##  $ N_JM_t0                  : chr "1147386"
##  $ N_AF_t0                  : chr "14049629"
##  $ N_AM_t0                  : chr "3048715"
##  $ Beta                     : chr "0.16666666666666666"
##  $ part                     : chr "rpert(10000, 0.52, 0.67, 0.60)"
##  $ prolif                   : chr "rtruncnorm(10000, 0, 3, 1.3, 0.15)"
##  $ prop_F_milked            : chr "0"
##  $ lac_duration             : chr "0"
##  $ avg_daily_yield_ltr      : chr "0"
##  $ milk_value_ltr           : chr "0"
##  $ GammaF                   : chr "3.3333333333333335E-3"
##  $ GammaM                   : chr "4.5000000000000005E-2"
##  $ AlphaN                   : chr "rpert(1000, 0.09/6, 0.49/6, 0.2/6)"
##  $ AlphaJ                   : chr "rpert(1000, 0.03/6, 0.30/6, 0.07/6)"
##  $ AlphaF                   : chr "rpert(1000, 0.02/12, 0.13/12, 0.05/12)"
##  $ AlphaM                   : chr "rpert(1000, 0.02/12, 0.17/12, 0.06/12)"
##  $ CullF                    : chr "9.2592592592592587E-3"
##  $ CullM                    : chr "2.0833333333333332E-2"
##  $ lwNF                     : chr "rtruncnorm(10000, a = 1, b = 15, mean = 11.7, sd = 2.2)"
##  $ lwNM                     : chr "rtruncnorm(10000, a = 1, b = 15, mean =11.7, sd = 2.2)"
##  $ lwJF                     : chr "rnorm(10000, 21.1, sd = 3.8)"
##  $ lwJM                     : chr "rnorm(10000, 21.1, sd = 3.8)"
##  $ lwAF                     : chr "rnorm(10000, 28.6, sd = 4.1)"
##  $ lwAM                     : chr "rnorm(10000, 31.5, sd = 6.8)"
##  $ ccy                      : chr "0.42"
##  $ fvNF                     : chr "rpert(10000, 839, 1676, 1385)"
##  $ fvJF                     : chr "rpert(10000, 1246, 4300, 2120)"
##  $ fvAF                     : chr "rpert(10000, 2400, 4013, 2890)"
##  $ fvNM                     : chr "rpert(10000, 839, 1676, 1385)"
##  $ fvJM                     : chr "rpert(10000, 1246, 5949, 2541)"
##  $ fvAM                     : chr "rpert(10000, 2341, 8413, 4036)"
##  $ #fert_offtake            : chr "0.25"
##  $ hides_rate               : chr "1"
##  $ hides_rate_mor           : chr "0.5"
##  $ hides_value              : chr "40"
##  $ Man_N                    : chr "0.1"
##  $ Man_J                    : chr "0.2"
##  $ Man_A                    : chr "0.3"
##  $ Man_value                : chr "0.5"
##  $ DM_req_prpn_NF           : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_NM           : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_JF           : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_JM           : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_AF           : chr "2.5999999999999999E-2"
##  $ DM_req_prpn_AM           : chr "2.5999999999999999E-2"
##  $ prpn_lskeepers_purch_feed: chr "0.25"
##  $ prpn_feed_paid_for       : chr "0.5"
##  $ Feed_cost_kg             : chr "rpert(10000, 2.5, 6.5, 3.46)"
##  $ DM_in_feed               : chr "rpert(10000, 0.85, 0.95, 0.9)"
##  $ Lab_SR                   : chr "rpert(10000, (260/12), (649/12), (368/12))"
##  $ lab_non_health           : chr "1"
##  $ Health_exp               : chr "runif(10000, (2.2/12), (2.8/12))"
##  $ Interest_rate            : chr "0"
##  $ Infrastructure_per_head  : chr "1"

split data frame by rows

This is useful when more than one scenario will run.

b_scen = split( b_scen , seq(nrow(b_scen)) ) #%>% 

#b_scen %>% head

b_scen %>% str
## List of 1
##  $ 1:'data.frame':   1 obs. of  58 variables:
##   ..$ Num_months               : chr "12"
##   ..$ N_NF_t0                  : chr "2070822"
##   ..$ N_NM_t0                  : chr "2070822"
##   ..$ N_JF_t0                  : chr "1915971"
##   ..$ N_JM_t0                  : chr "1147386"
##   ..$ N_AF_t0                  : chr "14049629"
##   ..$ N_AM_t0                  : chr "3048715"
##   ..$ Beta                     : chr "0.16666666666666666"
##   ..$ part                     : chr "rpert(10000, 0.52, 0.67, 0.60)"
##   ..$ prolif                   : chr "rtruncnorm(10000, 0, 3, 1.3, 0.15)"
##   ..$ prop_F_milked            : chr "0"
##   ..$ lac_duration             : chr "0"
##   ..$ avg_daily_yield_ltr      : chr "0"
##   ..$ milk_value_ltr           : chr "0"
##   ..$ GammaF                   : chr "3.3333333333333335E-3"
##   ..$ GammaM                   : chr "4.5000000000000005E-2"
##   ..$ AlphaN                   : chr "rpert(1000, 0.09/6, 0.49/6, 0.2/6)"
##   ..$ AlphaJ                   : chr "rpert(1000, 0.03/6, 0.30/6, 0.07/6)"
##   ..$ AlphaF                   : chr "rpert(1000, 0.02/12, 0.13/12, 0.05/12)"
##   ..$ AlphaM                   : chr "rpert(1000, 0.02/12, 0.17/12, 0.06/12)"
##   ..$ CullF                    : chr "9.2592592592592587E-3"
##   ..$ CullM                    : chr "2.0833333333333332E-2"
##   ..$ lwNF                     : chr "rtruncnorm(10000, a = 1, b = 15, mean = 11.7, sd = 2.2)"
##   ..$ lwNM                     : chr "rtruncnorm(10000, a = 1, b = 15, mean =11.7, sd = 2.2)"
##   ..$ lwJF                     : chr "rnorm(10000, 21.1, sd = 3.8)"
##   ..$ lwJM                     : chr "rnorm(10000, 21.1, sd = 3.8)"
##   ..$ lwAF                     : chr "rnorm(10000, 28.6, sd = 4.1)"
##   ..$ lwAM                     : chr "rnorm(10000, 31.5, sd = 6.8)"
##   ..$ ccy                      : chr "0.42"
##   ..$ fvNF                     : chr "rpert(10000, 839, 1676, 1385)"
##   ..$ fvJF                     : chr "rpert(10000, 1246, 4300, 2120)"
##   ..$ fvAF                     : chr "rpert(10000, 2400, 4013, 2890)"
##   ..$ fvNM                     : chr "rpert(10000, 839, 1676, 1385)"
##   ..$ fvJM                     : chr "rpert(10000, 1246, 5949, 2541)"
##   ..$ fvAM                     : chr "rpert(10000, 2341, 8413, 4036)"
##   ..$ #fert_offtake            : chr "0.25"
##   ..$ hides_rate               : chr "1"
##   ..$ hides_rate_mor           : chr "0.5"
##   ..$ hides_value              : chr "40"
##   ..$ Man_N                    : chr "0.1"
##   ..$ Man_J                    : chr "0.2"
##   ..$ Man_A                    : chr "0.3"
##   ..$ Man_value                : chr "0.5"
##   ..$ DM_req_prpn_NF           : chr "2.5999999999999999E-2"
##   ..$ DM_req_prpn_NM           : chr "2.5999999999999999E-2"
##   ..$ DM_req_prpn_JF           : chr "2.5999999999999999E-2"
##   ..$ DM_req_prpn_JM           : chr "2.5999999999999999E-2"
##   ..$ DM_req_prpn_AF           : chr "2.5999999999999999E-2"
##   ..$ DM_req_prpn_AM           : chr "2.5999999999999999E-2"
##   ..$ prpn_lskeepers_purch_feed: chr "0.25"
##   ..$ prpn_feed_paid_for       : chr "0.5"
##   ..$ Feed_cost_kg             : chr "rpert(10000, 2.5, 6.5, 3.46)"
##   ..$ DM_in_feed               : chr "rpert(10000, 0.85, 0.95, 0.9)"
##   ..$ Lab_SR                   : chr "rpert(10000, (260/12), (649/12), (368/12))"
##   ..$ lab_non_health           : chr "1"
##   ..$ Health_exp               : chr "runif(10000, (2.2/12), (2.8/12))"
##   ..$ Interest_rate            : chr "0"
##   ..$ Infrastructure_per_head  : chr "1"

parse text and evaluate it

The character inputs are parsed and evaluated. Function to sample distribution will return numerical vector.

b_scen = map(b_scen , ~ map(.x, ~ eval(parse(text = .x)))) #%>% 



b_scen %>% str
## List of 1
##  $ 1:List of 58
##   ..$ Num_months               : num 12
##   ..$ N_NF_t0                  : num 2070822
##   ..$ N_NM_t0                  : num 2070822
##   ..$ N_JF_t0                  : num 1915971
##   ..$ N_JM_t0                  : num 1147386
##   ..$ N_AF_t0                  : num 1.4e+07
##   ..$ N_AM_t0                  : num 3048715
##   ..$ Beta                     : num 0.167
##   ..$ part                     : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ prolif                   : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ prop_F_milked            : num 0
##   ..$ lac_duration             : num 0
##   ..$ avg_daily_yield_ltr      : num 0
##   ..$ milk_value_ltr           : num 0
##   ..$ GammaF                   : num 0.00333
##   ..$ GammaM                   : num 0.045
##   ..$ AlphaN                   : num [1:1000] 0.0567 0.0266 0.0287 0.0287 0.0289 ...
##   ..$ AlphaJ                   : num [1:1000] 0.0164 0.02767 0.01952 0.01655 0.00798 ...
##   ..$ AlphaF                   : num [1:1000] 0.00535 0.00339 0.00451 0.00479 0.00271 ...
##   ..$ AlphaM                   : num [1:1000] 0.0041 0.00641 0.00644 0.00506 0.0052 ...
##   ..$ CullF                    : num 0.00926
##   ..$ CullM                    : num 0.0208
##   ..$ lwNF                     : num [1:10000] 11.8 11.1 13 12.4 11.1 ...
##   ..$ lwNM                     : num [1:10000] 8.33 14.3 11.69 9.84 13.75 ...
##   ..$ lwJF                     : num [1:10000] 22 19.7 11.8 25.7 25 ...
##   ..$ lwJM                     : num [1:10000] 26.7 23.7 25.2 25.6 20.8 ...
##   ..$ lwAF                     : num [1:10000] 25.2 32.1 27.9 26.1 27.9 ...
##   ..$ lwAM                     : num [1:10000] 47.3 32.2 29.9 30.7 24.5 ...
##   ..$ ccy                      : num 0.42
##   ..$ fvNF                     : num [1:10000] 1117 1362 1345 1287 1576 ...
##   ..$ fvJF                     : num [1:10000] 1628 2813 2565 2888 2344 ...
##   ..$ fvAF                     : num [1:10000] 2878 2615 2718 3177 2751 ...
##   ..$ fvNM                     : num [1:10000] 980 1464 1278 1565 1465 ...
##   ..$ fvJM                     : num [1:10000] 2981 3969 2957 2433 2438 ...
##   ..$ fvAM                     : num [1:10000] 4272 3908 2849 5042 5737 ...
##   ..$ #fert_offtake            : num 0.25
##   ..$ hides_rate               : num 1
##   ..$ hides_rate_mor           : num 0.5
##   ..$ hides_value              : num 40
##   ..$ Man_N                    : num 0.1
##   ..$ Man_J                    : num 0.2
##   ..$ Man_A                    : num 0.3
##   ..$ Man_value                : num 0.5
##   ..$ DM_req_prpn_NF           : num 0.026
##   ..$ DM_req_prpn_NM           : num 0.026
##   ..$ DM_req_prpn_JF           : num 0.026
##   ..$ DM_req_prpn_JM           : num 0.026
##   ..$ DM_req_prpn_AF           : num 0.026
##   ..$ DM_req_prpn_AM           : num 0.026
##   ..$ prpn_lskeepers_purch_feed: num 0.25
##   ..$ prpn_feed_paid_for       : num 0.5
##   ..$ Feed_cost_kg             : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ DM_in_feed               : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ Lab_SR                   : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ lab_non_health           : num 1
##   ..$ Health_exp               : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ Interest_rate            : num 0
##   ..$ Infrastructure_per_head  : num 1

generate a list of lists of “production parameters” for age -sex categories

generate a list of lists of “production parameters” for age -sex categories. “production parameter” which will not vary are repeated across categories. Names (.p) are given to the corresponding age -sex populations in the respective list (N0). For details of the labels of the “production parameters” pls refer to https://github.com/GBADsInformatics/GBADsLiverpool/blob/main/Ethiopia%20Workspace/Code%20and%20Control%20Files/AHLE%20scenario%20parameters%20SMALLRUMINANTS.xlsx

b_scen = map(
  
  b_scen ,
  
  function(x, name){
    
    attach(x)
    N0 = list(N_NF_t0, N_NM_t0, N_JF_t0, N_JM_t0, N_AF_t0, N_AM_t0)
    
    names(N0) <- name
    
    par = list(
      
      g = Beta, 
      pt = part, 
      pf = prolif, 
      pfm = prop_F_milked, 
      ld = lac_duration, 
      ady = avg_daily_yield_ltr, 
      mvl = milk_value_ltr, 
      o = list(GammaF, GammaM) %>% rep( 3 ), 
      d = list(AlphaN, AlphaN, AlphaJ, AlphaJ, AlphaF, AlphaM), 
      c = list(CullF, CullM) %>% rep( 3 ), 
      lw = list(lwNF, lwNM, lwJF, lwJM,lwAF,lwAM), 
      ccy = ccy, 
      fv = list(fvNF, fvNM, fvJF, fvJM, fvAF, fvAM), 
      hr = hides_rate, 
      hrm = hides_rate_mor, 
      hv = hides_value, 
      m = list( Man_N, Man_J, Man_A) %>% rep( each = 2), 
      mv = Man_value, 
      dm = list(DM_req_prpn_NF, DM_req_prpn_NM, DM_req_prpn_JF, DM_req_prpn_JM, DM_req_prpn_AF, DM_req_prpn_AM), 
      plp = prpn_lskeepers_purch_feed, 
      pfp = prpn_feed_paid_for, 
      fc = Feed_cost_kg, 
      dif = DM_in_feed, 
      lsr = Lab_SR, 
      lnh = lab_non_health, 
      he = Health_exp, 
      ir = Interest_rate, 
      iph   =   Infrastructure_per_head
      
    )
    
    detach(x)
    
    par %>% map( ~ {
      
      if( is.list(.x) ) .x = .x else .x = list(.x) %>% rep(6)
      
    }
    
    ) %>% c(list(N0 = N0), .)
    
  } , 
  
  .p
  
) 
## The following object is masked _by_ .GlobalEnv:
## 
##     Num_months
#b_scen %>% head

b_scen %>% str
## List of 1
##  $ 1:List of 29
##   ..$ N0 :List of 6
##   .. ..$ .NF: num 2070822
##   .. ..$ .NM: num 2070822
##   .. ..$ .JF: num 1915971
##   .. ..$ .JM: num 1147386
##   .. ..$ .AF: num 1.4e+07
##   .. ..$ .AM: num 3048715
##   ..$ g  :List of 6
##   .. ..$ : num 0.167
##   .. ..$ : num 0.167
##   .. ..$ : num 0.167
##   .. ..$ : num 0.167
##   .. ..$ : num 0.167
##   .. ..$ : num 0.167
##   ..$ pt :List of 6
##   .. ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   .. ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   .. ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   .. ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   .. ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   .. ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ pf :List of 6
##   .. ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   .. ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   .. ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   .. ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   .. ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   .. ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ pfm:List of 6
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   ..$ ld :List of 6
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   ..$ ady:List of 6
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   ..$ mvl:List of 6
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   ..$ o  :List of 6
##   .. ..$ : num 0.00333
##   .. ..$ : num 0.045
##   .. ..$ : num 0.00333
##   .. ..$ : num 0.045
##   .. ..$ : num 0.00333
##   .. ..$ : num 0.045
##   ..$ d  :List of 6
##   .. ..$ : num [1:1000] 0.0567 0.0266 0.0287 0.0287 0.0289 ...
##   .. ..$ : num [1:1000] 0.0567 0.0266 0.0287 0.0287 0.0289 ...
##   .. ..$ : num [1:1000] 0.0164 0.02767 0.01952 0.01655 0.00798 ...
##   .. ..$ : num [1:1000] 0.0164 0.02767 0.01952 0.01655 0.00798 ...
##   .. ..$ : num [1:1000] 0.00535 0.00339 0.00451 0.00479 0.00271 ...
##   .. ..$ : num [1:1000] 0.0041 0.00641 0.00644 0.00506 0.0052 ...
##   ..$ c  :List of 6
##   .. ..$ : num 0.00926
##   .. ..$ : num 0.0208
##   .. ..$ : num 0.00926
##   .. ..$ : num 0.0208
##   .. ..$ : num 0.00926
##   .. ..$ : num 0.0208
##   ..$ lw :List of 6
##   .. ..$ : num [1:10000] 11.8 11.1 13 12.4 11.1 ...
##   .. ..$ : num [1:10000] 8.33 14.3 11.69 9.84 13.75 ...
##   .. ..$ : num [1:10000] 22 19.7 11.8 25.7 25 ...
##   .. ..$ : num [1:10000] 26.7 23.7 25.2 25.6 20.8 ...
##   .. ..$ : num [1:10000] 25.2 32.1 27.9 26.1 27.9 ...
##   .. ..$ : num [1:10000] 47.3 32.2 29.9 30.7 24.5 ...
##   ..$ ccy:List of 6
##   .. ..$ : num 0.42
##   .. ..$ : num 0.42
##   .. ..$ : num 0.42
##   .. ..$ : num 0.42
##   .. ..$ : num 0.42
##   .. ..$ : num 0.42
##   ..$ fv :List of 6
##   .. ..$ : num [1:10000] 1117 1362 1345 1287 1576 ...
##   .. ..$ : num [1:10000] 980 1464 1278 1565 1465 ...
##   .. ..$ : num [1:10000] 1628 2813 2565 2888 2344 ...
##   .. ..$ : num [1:10000] 2981 3969 2957 2433 2438 ...
##   .. ..$ : num [1:10000] 2878 2615 2718 3177 2751 ...
##   .. ..$ : num [1:10000] 4272 3908 2849 5042 5737 ...
##   ..$ hr :List of 6
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   ..$ hrm:List of 6
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   ..$ hv :List of 6
##   .. ..$ : num 40
##   .. ..$ : num 40
##   .. ..$ : num 40
##   .. ..$ : num 40
##   .. ..$ : num 40
##   .. ..$ : num 40
##   ..$ m  :List of 6
##   .. ..$ : num 0.1
##   .. ..$ : num 0.1
##   .. ..$ : num 0.2
##   .. ..$ : num 0.2
##   .. ..$ : num 0.3
##   .. ..$ : num 0.3
##   ..$ mv :List of 6
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   ..$ dm :List of 6
##   .. ..$ : num 0.026
##   .. ..$ : num 0.026
##   .. ..$ : num 0.026
##   .. ..$ : num 0.026
##   .. ..$ : num 0.026
##   .. ..$ : num 0.026
##   ..$ plp:List of 6
##   .. ..$ : num 0.25
##   .. ..$ : num 0.25
##   .. ..$ : num 0.25
##   .. ..$ : num 0.25
##   .. ..$ : num 0.25
##   .. ..$ : num 0.25
##   ..$ pfp:List of 6
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   .. ..$ : num 0.5
##   ..$ fc :List of 6
##   .. ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   .. ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   .. ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   .. ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   .. ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   .. ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ dif:List of 6
##   .. ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   .. ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   .. ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   .. ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   .. ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   .. ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ lsr:List of 6
##   .. ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   .. ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   .. ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   .. ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   .. ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   .. ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ lnh:List of 6
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   ..$ he :List of 6
##   .. ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   .. ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   .. ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   .. ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   .. ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   .. ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ ir :List of 6
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   .. ..$ : num 0
##   ..$ iph:List of 6
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
##   .. ..$ : num 1
#}; 

#par
#} 

# b_scen = f_scen(baseline_scen)

c_scen

c_scen =NULL in this exercise. But it can be another comparison scenario and will be handled similar to b_scen in https://github.com/stephen-wh-kwok/testing/blob/main/ahle_sr.R

c_scen = NULL # f_scen(control_scen)
c_scen
## NULL

f_par

A f_par function was created in https://github.com/stephen-wh-kwok/testing/blob/main/ahle_sr.R to allow b_scen to be a list of more than one element. In this exercise, the new objects are created without using a function as b_scen is a single list (of lists).

# f_par = function(
    # b_scen, c_scen, age, sex, cats, .g, .t, .p, .l, data,
# file, sheet, par_names, ignore, nruns, Num_months, baseline_scen, control_scen, ill_month
# ){

set seed

Set a seed number. In this exercise nruns = 1 as an example. In https://github.com/stephen-wh-kwok/testing/blob/main/ahle_sr.R if nruns > 1, the procedures will be run in parallel computing.

# out = foreach(
seed = 1 :nruns #) %dopar% {
seed
## [1] 1

create an empty list for population

require(tidyverse) 
pop <- list()
pop
## list()

add the list of initial age-sex populations to the first element of the list for population

pop[[1]] <- b_scen[[1]]$N0
pop
## [[1]]
## [[1]]$.NF
## [1] 2070822
## 
## [[1]]$.NM
## [1] 2070822
## 
## [[1]]$.JF
## [1] 1915971
## 
## [[1]]$.JM
## [1] 1147386
## 
## [[1]]$.AF
## [1] 14049629
## 
## [[1]]$.AM
## [1] 3048715

set Num_months to run

In https://github.com/stephen-wh-kwok/testing/blob/main/ahle_sr.R Num_months should be set in the argument, and in the for loop the “production parameters” will be computed for each month. In this exercise, a for loop is not used as the first month is the only time step.

# for(
i = 1:Num_months
i
## [1] 1
#){

population vector of the “previous” stage

Create a vector of populations by age-sex of the “previous stage”.

attach(pop[[i]])

pre = list(.AF, .AF, .NF, .NM, .JF, .JM)
pre
## [[1]]
## [1] 14049629
## 
## [[2]]
## [1] 14049629
## 
## [[3]]
## [1] 2070822
## 
## [[4]]
## [1] 2070822
## 
## [[5]]
## [1] 1915971
## 
## [[6]]
## [1] 1147386

population vector of the stage of concern

Create a vector of populations by age-sex of the stage of concern. e.g., if AF times a certain “production parameter” will give NF. NF times another “production parameter” will give JF.

post = list(.NF, .NM, .JF, .JM, .AF, .AM)
post
## [[1]]
## [1] 2070822
## 
## [[2]]
## [1] 2070822
## 
## [[3]]
## [1] 1915971
## 
## [[4]]
## [1] 1147386
## 
## [[5]]
## [1] 14049629
## 
## [[6]]
## [1] 3048715
detach(pop[[i]])

which scenario to use in which month

b_scen will be used for month 1.

if(i %in% ill_month) p = c_scen else p = b_scen[[1]]

#head(p)

str(p)
## List of 29
##  $ N0 :List of 6
##   ..$ .NF: num 2070822
##   ..$ .NM: num 2070822
##   ..$ .JF: num 1915971
##   ..$ .JM: num 1147386
##   ..$ .AF: num 1.4e+07
##   ..$ .AM: num 3048715
##  $ g  :List of 6
##   ..$ : num 0.167
##   ..$ : num 0.167
##   ..$ : num 0.167
##   ..$ : num 0.167
##   ..$ : num 0.167
##   ..$ : num 0.167
##  $ pt :List of 6
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##  $ pf :List of 6
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##  $ pfm:List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ ld :List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ ady:List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ mvl:List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ o  :List of 6
##   ..$ : num 0.00333
##   ..$ : num 0.045
##   ..$ : num 0.00333
##   ..$ : num 0.045
##   ..$ : num 0.00333
##   ..$ : num 0.045
##  $ d  :List of 6
##   ..$ : num [1:1000] 0.0567 0.0266 0.0287 0.0287 0.0289 ...
##   ..$ : num [1:1000] 0.0567 0.0266 0.0287 0.0287 0.0289 ...
##   ..$ : num [1:1000] 0.0164 0.02767 0.01952 0.01655 0.00798 ...
##   ..$ : num [1:1000] 0.0164 0.02767 0.01952 0.01655 0.00798 ...
##   ..$ : num [1:1000] 0.00535 0.00339 0.00451 0.00479 0.00271 ...
##   ..$ : num [1:1000] 0.0041 0.00641 0.00644 0.00506 0.0052 ...
##  $ c  :List of 6
##   ..$ : num 0.00926
##   ..$ : num 0.0208
##   ..$ : num 0.00926
##   ..$ : num 0.0208
##   ..$ : num 0.00926
##   ..$ : num 0.0208
##  $ lw :List of 6
##   ..$ : num [1:10000] 11.8 11.1 13 12.4 11.1 ...
##   ..$ : num [1:10000] 8.33 14.3 11.69 9.84 13.75 ...
##   ..$ : num [1:10000] 22 19.7 11.8 25.7 25 ...
##   ..$ : num [1:10000] 26.7 23.7 25.2 25.6 20.8 ...
##   ..$ : num [1:10000] 25.2 32.1 27.9 26.1 27.9 ...
##   ..$ : num [1:10000] 47.3 32.2 29.9 30.7 24.5 ...
##  $ ccy:List of 6
##   ..$ : num 0.42
##   ..$ : num 0.42
##   ..$ : num 0.42
##   ..$ : num 0.42
##   ..$ : num 0.42
##   ..$ : num 0.42
##  $ fv :List of 6
##   ..$ : num [1:10000] 1117 1362 1345 1287 1576 ...
##   ..$ : num [1:10000] 980 1464 1278 1565 1465 ...
##   ..$ : num [1:10000] 1628 2813 2565 2888 2344 ...
##   ..$ : num [1:10000] 2981 3969 2957 2433 2438 ...
##   ..$ : num [1:10000] 2878 2615 2718 3177 2751 ...
##   ..$ : num [1:10000] 4272 3908 2849 5042 5737 ...
##  $ hr :List of 6
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##  $ hrm:List of 6
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##  $ hv :List of 6
##   ..$ : num 40
##   ..$ : num 40
##   ..$ : num 40
##   ..$ : num 40
##   ..$ : num 40
##   ..$ : num 40
##  $ m  :List of 6
##   ..$ : num 0.1
##   ..$ : num 0.1
##   ..$ : num 0.2
##   ..$ : num 0.2
##   ..$ : num 0.3
##   ..$ : num 0.3
##  $ mv :List of 6
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##  $ dm :List of 6
##   ..$ : num 0.026
##   ..$ : num 0.026
##   ..$ : num 0.026
##   ..$ : num 0.026
##   ..$ : num 0.026
##   ..$ : num 0.026
##  $ plp:List of 6
##   ..$ : num 0.25
##   ..$ : num 0.25
##   ..$ : num 0.25
##   ..$ : num 0.25
##   ..$ : num 0.25
##   ..$ : num 0.25
##  $ pfp:List of 6
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##  $ fc :List of 6
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##  $ dif:List of 6
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##  $ lsr:List of 6
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##  $ lnh:List of 6
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##  $ he :List of 6
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##  $ ir :List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ iph:List of 6
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1

list_of_lists

concatenate the population vectors, age-sex category labels, lists of binary tests of age-sex conditions, and the b_scen (which contains lists of “production parameters” by age-sex categories).

list_of_lists= list(pre = pre,
                    post = post, 
                    .t = .t,
                    .p = .p ) %>% c(., .l, p) 

#list_of_lists %>% head

list_of_lists %>% str
## List of 38
##  $ pre :List of 6
##   ..$ : num 1.4e+07
##   ..$ : num 1.4e+07
##   ..$ : num 2070822
##   ..$ : num 2070822
##   ..$ : num 1915971
##   ..$ : num 1147386
##  $ post:List of 6
##   ..$ : num 2070822
##   ..$ : num 2070822
##   ..$ : num 1915971
##   ..$ : num 1147386
##   ..$ : num 1.4e+07
##   ..$ : num 3048715
##  $ .t  : chr [1:6] "NF" "NM" "JF" "JM" ...
##  $ .p  :List of 6
##   ..$ : chr ".NF"
##   ..$ : chr ".NM"
##   ..$ : chr ".JF"
##   ..$ : chr ".JM"
##   ..$ : chr ".AF"
##   ..$ : chr ".AM"
##  $ .n  :List of 6
##   ..$ : int 1
##   ..$ : int 1
##   ..$ : int 0
##   ..$ : int 0
##   ..$ : int 0
##   ..$ : int 0
##  $ .j  :List of 6
##   ..$ : int 0
##   ..$ : int 0
##   ..$ : int 1
##   ..$ : int 1
##   ..$ : int 0
##   ..$ : int 0
##  $ .a  :List of 6
##   ..$ : int 0
##   ..$ : int 0
##   ..$ : int 0
##   ..$ : int 0
##   ..$ : int 1
##   ..$ : int 1
##  $ .f  :List of 6
##   ..$ : int 1
##   ..$ : int 0
##   ..$ : int 1
##   ..$ : int 0
##   ..$ : int 1
##   ..$ : int 0
##  $ .m  :List of 6
##   ..$ : int 0
##   ..$ : int 1
##   ..$ : int 0
##   ..$ : int 1
##   ..$ : int 0
##   ..$ : int 1
##  $ N0  :List of 6
##   ..$ .NF: num 2070822
##   ..$ .NM: num 2070822
##   ..$ .JF: num 1915971
##   ..$ .JM: num 1147386
##   ..$ .AF: num 1.4e+07
##   ..$ .AM: num 3048715
##  $ g   :List of 6
##   ..$ : num 0.167
##   ..$ : num 0.167
##   ..$ : num 0.167
##   ..$ : num 0.167
##   ..$ : num 0.167
##   ..$ : num 0.167
##  $ pt  :List of 6
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##   ..$ : num [1:10000] 0.608 0.596 0.582 0.574 0.617 ...
##  $ pf  :List of 6
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##   ..$ : num [1:10000] 1.39 1 1.15 1.25 1.13 ...
##  $ pfm :List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ ld  :List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ ady :List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ mvl :List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ o   :List of 6
##   ..$ : num 0.00333
##   ..$ : num 0.045
##   ..$ : num 0.00333
##   ..$ : num 0.045
##   ..$ : num 0.00333
##   ..$ : num 0.045
##  $ d   :List of 6
##   ..$ : num [1:1000] 0.0567 0.0266 0.0287 0.0287 0.0289 ...
##   ..$ : num [1:1000] 0.0567 0.0266 0.0287 0.0287 0.0289 ...
##   ..$ : num [1:1000] 0.0164 0.02767 0.01952 0.01655 0.00798 ...
##   ..$ : num [1:1000] 0.0164 0.02767 0.01952 0.01655 0.00798 ...
##   ..$ : num [1:1000] 0.00535 0.00339 0.00451 0.00479 0.00271 ...
##   ..$ : num [1:1000] 0.0041 0.00641 0.00644 0.00506 0.0052 ...
##  $ c   :List of 6
##   ..$ : num 0.00926
##   ..$ : num 0.0208
##   ..$ : num 0.00926
##   ..$ : num 0.0208
##   ..$ : num 0.00926
##   ..$ : num 0.0208
##  $ lw  :List of 6
##   ..$ : num [1:10000] 11.8 11.1 13 12.4 11.1 ...
##   ..$ : num [1:10000] 8.33 14.3 11.69 9.84 13.75 ...
##   ..$ : num [1:10000] 22 19.7 11.8 25.7 25 ...
##   ..$ : num [1:10000] 26.7 23.7 25.2 25.6 20.8 ...
##   ..$ : num [1:10000] 25.2 32.1 27.9 26.1 27.9 ...
##   ..$ : num [1:10000] 47.3 32.2 29.9 30.7 24.5 ...
##  $ ccy :List of 6
##   ..$ : num 0.42
##   ..$ : num 0.42
##   ..$ : num 0.42
##   ..$ : num 0.42
##   ..$ : num 0.42
##   ..$ : num 0.42
##  $ fv  :List of 6
##   ..$ : num [1:10000] 1117 1362 1345 1287 1576 ...
##   ..$ : num [1:10000] 980 1464 1278 1565 1465 ...
##   ..$ : num [1:10000] 1628 2813 2565 2888 2344 ...
##   ..$ : num [1:10000] 2981 3969 2957 2433 2438 ...
##   ..$ : num [1:10000] 2878 2615 2718 3177 2751 ...
##   ..$ : num [1:10000] 4272 3908 2849 5042 5737 ...
##  $ hr  :List of 6
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##  $ hrm :List of 6
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##  $ hv  :List of 6
##   ..$ : num 40
##   ..$ : num 40
##   ..$ : num 40
##   ..$ : num 40
##   ..$ : num 40
##   ..$ : num 40
##  $ m   :List of 6
##   ..$ : num 0.1
##   ..$ : num 0.1
##   ..$ : num 0.2
##   ..$ : num 0.2
##   ..$ : num 0.3
##   ..$ : num 0.3
##  $ mv  :List of 6
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##  $ dm  :List of 6
##   ..$ : num 0.026
##   ..$ : num 0.026
##   ..$ : num 0.026
##   ..$ : num 0.026
##   ..$ : num 0.026
##   ..$ : num 0.026
##  $ plp :List of 6
##   ..$ : num 0.25
##   ..$ : num 0.25
##   ..$ : num 0.25
##   ..$ : num 0.25
##   ..$ : num 0.25
##   ..$ : num 0.25
##  $ pfp :List of 6
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##   ..$ : num 0.5
##  $ fc  :List of 6
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##   ..$ : num [1:10000] 5.18 4.99 4.28 4.16 3.61 ...
##  $ dif :List of 6
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##   ..$ : num [1:10000] 0.868 0.919 0.893 0.896 0.897 ...
##  $ lsr :List of 6
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##   ..$ : num [1:10000] 34.1 36.4 40 24.6 42.5 ...
##  $ lnh :List of 6
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##  $ he  :List of 6
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##   ..$ : num [1:10000] 0.206 0.22 0.219 0.192 0.233 ...
##  $ ir  :List of 6
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##   ..$ : num 0
##  $ iph :List of 6
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1
##   ..$ : num 1

the model

The pmap function allows mapping multiple arguments (e.g., lists of same length) in parallel for a function, so that for the nth element of each list will be mapped to a function, and there will be nth mapping.

The function right after the list_of_lists therefore has a number of arguments which is the same as the length of the list_of_lists.

e.g., if the stage of concern is NF (from .t),

the label is .NF (from .p),

the population of its “previous stage” is AF = 14049629 (from pre),

the population of stage of concern is NF = 2070822 (from post),

the binary test for N and F are 1 (from .n and .f respectively)(see .l),

the binary test for J, A and M are 0 (from .j, .a and .m respectively)(see .l),

the N0 to iph are “production parameters” for NF from b_scen.

Therefore the function works on all the values specific to a stage of concern.

In the function, the list_of_lists_2 is a list of lists of (1) “production rates”, (2) populations at different stages, (3) binary tests which are applicable to different stages of concern.

e.g., if the stage of concern is NF,

the parturition times proliferation per month by half (pt*pf/12/2) times “previous stage” of NF (AF) (pre) multiplied by the binary test of N for NF (.n = 1) – should be the number of births of NF stage.

The growth rate (g) times “previous stage” of NF (AF) (pre) multiplied by the binary test of J and A for NF (.j + .a = 0 + 0) – should return 0 as growth input from “previous stage” is not applicable to neonate stage.

Alternatively,

e.g., if the stage of concern is JF,

the parturition times proliferation per month by half (pt*pf/12/2) times “previous stage” of JF (NF) (pre) multiplied by the binary test of N for JF (.n = 0) – should return 0 as births is not given by neonates to juveniles.

The growth rate (g) times “previous stage” of JF (NF) (pre) multiplied by the binary test of J and A for JF (.j + .a = 1 + 0) – should return the number of growth input from neonates to juvenile.

The list_of_lists_2 is mapped to the first argument of the pmap function, and the function is the multiplication of (1) “production rates”, (2) populations at different stages, (3) binary tests which are applicable to different stages of concern.

The result is a data frame (df) with numbers of “Births”, “Growth in”, “Growth out”, “Deaths”, “Offtakes”, and “Culls”.

Then, additional “production parameters” are calculated based on these inputs and outputs, as well as the values from b_scen, and the binary test if applicable to stages of concern.

In this model the capital cost and infrastructure cost are placed in the first month only.

For the details of the object names pls refer to the b_scen above.

For the details of the calculation methods pls refer to https://github.com/GBADsInformatics/GBADsLiverpool/blob/main/Ethiopia%20Workspace/Run%20AHLE%20with%20control%20table_SMALLRUMINANTS.R

Appropriate suffixes are added to label column names of results which belong to a particular age-sex category.

pop[[ i+1 ]] <- pmap(
  
  list_of_lists, 
  
  function(pre, post, .t, .p,
           .n, .j, .a, .f, .m, 
           N0, g, pt, pf, pfm, ld, ady, mvl, 
           o, d, c, lw, ccy, fv, hr, hrm, hv, m, mv,
           dm, plp, pfp, fc, dif, lsr, lnh, he, ir, iph
  ){
    
    set.seed(seed)
    
    s = function(x) sample(x, 1)
    
    list_of_lists_2 = list( 
      
      list(pt*pf/12/2, g, g, d, o, c) %>% map(s), 
      c(list(pre) %>% rep(2), list(post) %>% rep(4)),
      list(.n, .j+.a, .n+.j, 1, .j+.a, .a)
      
    )
    
    df = pmap(
      
      list_of_lists_2 ,
      
      \(x,y,z) x*y*z
      
    ) %>% data.frame
    
    names(df) <- c("B", "Gi", "Go", "D", "O", "C")
    
    Df = df %>% mutate(
      
      sum = rowSums(.), 
      come = B + Gi, 
      leave = sum - come, 
      diff = come - leave, 
      new = post + diff, 
      NOftk = O * (.j + .a) + C * (.a * .m), 
      PopGro = diff, 
      TotNChg = NOftk + PopGro, 
      TotMort = D, 
      QLwKg = new *s(lw), 
      OftkLw = NOftk *s(lw), 
      QMeat = OftkLw *ccy, 
      QManu = new *s(m) *30, 
      QHides = D * (.j + .a) * hrm, 
      QMilk = new * (.a * .f) * s(pt) * pfm * ld * ady, 
      QWool = 0, 
      CumDM = new * dm * s(lw) * 30, 
      ValOftk = NOftk *s(fv), 
      ValHerd = diff *s(fv), 
      TotVal = ValHerd + ValOftk, 
      ValManu = QManu * mv, 
      ValHides = QHides * hv, 
      ValMilk = QMilk * mvl, 
      ProdVal = TotVal + ValManu + ValHides + ValMilk, 
      FdCost = new * dm * s(lw) * plp * pfp/s(dif) * s(fc) * 30, 
      LbCost = new * s(lsr) * lnh, 
      HthCost = new * s(he), 
      CapCost = ifelse(i == 1, new, 0) * s(fv) * ir, 
      IstCost = ifelse(i == 1, N0, 0) * s(iph), 
      TotExp = FdCost + LbCost + HthCost + CapCost + IstCost, 
      GrsMrg = ProdVal - TotExp, 
      update = new
    ) 
    
    names(Df) = names(Df) [ - length(Df) ] %>%
      
      paste0(., "_", .t) %>% 
      c(., .p); 
    
    Df
    
  }
  
) %>% data.frame 


#pop %>% head()

pop %>% str
## List of 2
##  $ :List of 6
##   ..$ .NF: num 2070822
##   ..$ .NM: num 2070822
##   ..$ .JF: num 1915971
##   ..$ .JM: num 1147386
##   ..$ .AF: num 1.4e+07
##   ..$ .AM: num 3048715
##  $ :'data.frame':    1 obs. of  228 variables:
##   ..$ B_NF       : num 521508
##   ..$ Gi_NF      : num 0
##   ..$ Go_NF      : num 345137
##   ..$ D_NF       : num 47266
##   ..$ O_NF       : num 0
##   ..$ C_NF       : num 0
##   ..$ sum_NF     : num 913912
##   ..$ come_NF    : num 521508
##   ..$ leave_NF   : num 392403
##   ..$ diff_NF    : num 129105
##   ..$ new_NF     : num 2199927
##   ..$ NOftk_NF   : num 0
##   ..$ PopGro_NF  : num 129105
##   ..$ TotNChg_NF : num 129105
##   ..$ TotMort_NF : num 47266
##   ..$ QLwKg_NF   : num 27561560
##   ..$ OftkLw_NF  : num 0
##   ..$ QMeat_NF   : num 0
##   ..$ QManu_NF   : num 6599781
##   ..$ QHides_NF  : num 0
##   ..$ QMilk_NF   : num 0
##   ..$ QWool_NF   : num 0
##   ..$ CumDM_NF   : num 22346778
##   ..$ ValOftk_NF : num 0
##   ..$ ValHerd_NF : num 1.56e+08
##   ..$ TotVal_NF  : num 1.56e+08
##   ..$ ValManu_NF : num 3299890
##   ..$ ValHides_NF: num 0
##   ..$ ValMilk_NF : num 0
##   ..$ ProdVal_NF : num 1.6e+08
##   ..$ FdCost_NF  : num 9314393
##   ..$ LbCost_NF  : num 74896988
##   ..$ HthCost_NF : num 425144
##   ..$ CapCost_NF : num 0
##   ..$ IstCost_NF : num 2070822
##   ..$ TotExp_NF  : num 86707347
##   ..$ GrsMrg_NF  : num 72922955
##   ..$ .NF        : num 2199927
##   ..$ B_NM       : num 521508
##   ..$ Gi_NM      : num 0
##   ..$ Go_NM      : num 345137
##   ..$ D_NM       : num 47266
##   ..$ O_NM       : num 0
##   ..$ C_NM       : num 0
##   ..$ sum_NM     : num 913912
##   ..$ come_NM    : num 521508
##   ..$ leave_NM   : num 392403
##   ..$ diff_NM    : num 129105
##   ..$ new_NM     : num 2199927
##   ..$ NOftk_NM   : num 0
##   ..$ PopGro_NM  : num 129105
##   ..$ TotNChg_NM : num 129105
##   ..$ TotMort_NM : num 47266
##   ..$ QLwKg_NM   : num 27100061
##   ..$ OftkLw_NM  : num 0
##   ..$ QMeat_NM   : num 0
##   ..$ QManu_NM   : num 6599781
##   ..$ QHides_NM  : num 0
##   ..$ QMilk_NM   : num 0
##   ..$ QWool_NM   : num 0
##   ..$ CumDM_NM   : num 17925164
##   ..$ ValOftk_NM : num 0
##   ..$ ValHerd_NM : num 1.77e+08
##   ..$ TotVal_NM  : num 1.77e+08
##   ..$ ValManu_NM : num 3299890
##   ..$ ValHides_NM: num 0
##   ..$ ValMilk_NM : num 0
##   ..$ ProdVal_NM : num 1.8e+08
##   ..$ FdCost_NM  : num 10455723
##   ..$ LbCost_NM  : num 74896988
##   ..$ HthCost_NM : num 425144
##   ..$ CapCost_NM : num 0
##   ..$ IstCost_NM : num 2070822
##   ..$ TotExp_NM  : num 87848677
##   ..$ GrsMrg_NM  : num 92529219
##   ..$ .NM        : num 2199927
##   ..$ B_JF       : num 0
##   ..$ Gi_JF      : num 345137
##   ..$ Go_JF      : num 319329
##   ..$ D_JF       : num 19892
##   ..$ O_JF       : num 6387
##   ..$ C_JF       : num 0
##   ..$ sum_JF     : num 690744
##   ..$ come_JF    : num 345137
##   ..$ leave_JF   : num 345607
##   ..$ diff_JF    : num -470
##   ..$ new_JF     : num 1915501
##   ..$ NOftk_JF   : num 6387
##   ..$ PopGro_JF  : num -470
##   ..$ TotNChg_JF : num 5917
##   ..$ TotMort_JF : num 19892
##   ..$ QLwKg_JF   : num 43421573
##   ..$ OftkLw_JF  : num 130170
##   ..$ QMeat_JF   : num 54671
##   ..$ QManu_JF   : num 11493008
##   ..$ QHides_JF  : num 9946
##   ..$ QMilk_JF   : num 0
##   ..$ QWool_JF   : num 0
##   ..$ CumDM_JF   : num 26557009
##   .. [list output truncated]
#}

remove the first element of the model result

remove the first element of the model result as it is the initial population sizes.

out = pop %>% .[-1] #%>%

#out %>% head

out %>% str
## List of 1
##  $ :'data.frame':    1 obs. of  228 variables:
##   ..$ B_NF       : num 521508
##   ..$ Gi_NF      : num 0
##   ..$ Go_NF      : num 345137
##   ..$ D_NF       : num 47266
##   ..$ O_NF       : num 0
##   ..$ C_NF       : num 0
##   ..$ sum_NF     : num 913912
##   ..$ come_NF    : num 521508
##   ..$ leave_NF   : num 392403
##   ..$ diff_NF    : num 129105
##   ..$ new_NF     : num 2199927
##   ..$ NOftk_NF   : num 0
##   ..$ PopGro_NF  : num 129105
##   ..$ TotNChg_NF : num 129105
##   ..$ TotMort_NF : num 47266
##   ..$ QLwKg_NF   : num 27561560
##   ..$ OftkLw_NF  : num 0
##   ..$ QMeat_NF   : num 0
##   ..$ QManu_NF   : num 6599781
##   ..$ QHides_NF  : num 0
##   ..$ QMilk_NF   : num 0
##   ..$ QWool_NF   : num 0
##   ..$ CumDM_NF   : num 22346778
##   ..$ ValOftk_NF : num 0
##   ..$ ValHerd_NF : num 1.56e+08
##   ..$ TotVal_NF  : num 1.56e+08
##   ..$ ValManu_NF : num 3299890
##   ..$ ValHides_NF: num 0
##   ..$ ValMilk_NF : num 0
##   ..$ ProdVal_NF : num 1.6e+08
##   ..$ FdCost_NF  : num 9314393
##   ..$ LbCost_NF  : num 74896988
##   ..$ HthCost_NF : num 425144
##   ..$ CapCost_NF : num 0
##   ..$ IstCost_NF : num 2070822
##   ..$ TotExp_NF  : num 86707347
##   ..$ GrsMrg_NF  : num 72922955
##   ..$ .NF        : num 2199927
##   ..$ B_NM       : num 521508
##   ..$ Gi_NM      : num 0
##   ..$ Go_NM      : num 345137
##   ..$ D_NM       : num 47266
##   ..$ O_NM       : num 0
##   ..$ C_NM       : num 0
##   ..$ sum_NM     : num 913912
##   ..$ come_NM    : num 521508
##   ..$ leave_NM   : num 392403
##   ..$ diff_NM    : num 129105
##   ..$ new_NM     : num 2199927
##   ..$ NOftk_NM   : num 0
##   ..$ PopGro_NM  : num 129105
##   ..$ TotNChg_NM : num 129105
##   ..$ TotMort_NM : num 47266
##   ..$ QLwKg_NM   : num 27100061
##   ..$ OftkLw_NM  : num 0
##   ..$ QMeat_NM   : num 0
##   ..$ QManu_NM   : num 6599781
##   ..$ QHides_NM  : num 0
##   ..$ QMilk_NM   : num 0
##   ..$ QWool_NM   : num 0
##   ..$ CumDM_NM   : num 17925164
##   ..$ ValOftk_NM : num 0
##   ..$ ValHerd_NM : num 1.77e+08
##   ..$ TotVal_NM  : num 1.77e+08
##   ..$ ValManu_NM : num 3299890
##   ..$ ValHides_NM: num 0
##   ..$ ValMilk_NM : num 0
##   ..$ ProdVal_NM : num 1.8e+08
##   ..$ FdCost_NM  : num 10455723
##   ..$ LbCost_NM  : num 74896988
##   ..$ HthCost_NM : num 425144
##   ..$ CapCost_NM : num 0
##   ..$ IstCost_NM : num 2070822
##   ..$ TotExp_NM  : num 87848677
##   ..$ GrsMrg_NM  : num 92529219
##   ..$ .NM        : num 2199927
##   ..$ B_JF       : num 0
##   ..$ Gi_JF      : num 345137
##   ..$ Go_JF      : num 319329
##   ..$ D_JF       : num 19892
##   ..$ O_JF       : num 6387
##   ..$ C_JF       : num 0
##   ..$ sum_JF     : num 690744
##   ..$ come_JF    : num 345137
##   ..$ leave_JF   : num 345607
##   ..$ diff_JF    : num -470
##   ..$ new_JF     : num 1915501
##   ..$ NOftk_JF   : num 6387
##   ..$ PopGro_JF  : num -470
##   ..$ TotNChg_JF : num 5917
##   ..$ TotMort_JF : num 19892
##   ..$ QLwKg_JF   : num 43421573
##   ..$ OftkLw_JF  : num 130170
##   ..$ QMeat_JF   : num 54671
##   ..$ QManu_JF   : num 11493008
##   ..$ QHides_JF  : num 9946
##   ..$ QMilk_JF   : num 0
##   ..$ QWool_JF   : num 0
##   ..$ CumDM_JF   : num 26557009
##   .. [list output truncated]

rbind

Binding rows will be useful if there are more than one scenario to run.

out = do.call(rbind, out) 

#out %>% head

out %>% str
## 'data.frame':    1 obs. of  228 variables:
##  $ B_NF       : num 521508
##  $ Gi_NF      : num 0
##  $ Go_NF      : num 345137
##  $ D_NF       : num 47266
##  $ O_NF       : num 0
##  $ C_NF       : num 0
##  $ sum_NF     : num 913912
##  $ come_NF    : num 521508
##  $ leave_NF   : num 392403
##  $ diff_NF    : num 129105
##  $ new_NF     : num 2199927
##  $ NOftk_NF   : num 0
##  $ PopGro_NF  : num 129105
##  $ TotNChg_NF : num 129105
##  $ TotMort_NF : num 47266
##  $ QLwKg_NF   : num 27561560
##  $ OftkLw_NF  : num 0
##  $ QMeat_NF   : num 0
##  $ QManu_NF   : num 6599781
##  $ QHides_NF  : num 0
##  $ QMilk_NF   : num 0
##  $ QWool_NF   : num 0
##  $ CumDM_NF   : num 22346778
##  $ ValOftk_NF : num 0
##  $ ValHerd_NF : num 1.56e+08
##  $ TotVal_NF  : num 1.56e+08
##  $ ValManu_NF : num 3299890
##  $ ValHides_NF: num 0
##  $ ValMilk_NF : num 0
##  $ ProdVal_NF : num 1.6e+08
##  $ FdCost_NF  : num 9314393
##  $ LbCost_NF  : num 74896988
##  $ HthCost_NF : num 425144
##  $ CapCost_NF : num 0
##  $ IstCost_NF : num 2070822
##  $ TotExp_NF  : num 86707347
##  $ GrsMrg_NF  : num 72922955
##  $ .NF        : num 2199927
##  $ B_NM       : num 521508
##  $ Gi_NM      : num 0
##  $ Go_NM      : num 345137
##  $ D_NM       : num 47266
##  $ O_NM       : num 0
##  $ C_NM       : num 0
##  $ sum_NM     : num 913912
##  $ come_NM    : num 521508
##  $ leave_NM   : num 392403
##  $ diff_NM    : num 129105
##  $ new_NM     : num 2199927
##  $ NOftk_NM   : num 0
##  $ PopGro_NM  : num 129105
##  $ TotNChg_NM : num 129105
##  $ TotMort_NM : num 47266
##  $ QLwKg_NM   : num 27100061
##  $ OftkLw_NM  : num 0
##  $ QMeat_NM   : num 0
##  $ QManu_NM   : num 6599781
##  $ QHides_NM  : num 0
##  $ QMilk_NM   : num 0
##  $ QWool_NM   : num 0
##  $ CumDM_NM   : num 17925164
##  $ ValOftk_NM : num 0
##  $ ValHerd_NM : num 1.77e+08
##  $ TotVal_NM  : num 1.77e+08
##  $ ValManu_NM : num 3299890
##  $ ValHides_NM: num 0
##  $ ValMilk_NM : num 0
##  $ ProdVal_NM : num 1.8e+08
##  $ FdCost_NM  : num 10455723
##  $ LbCost_NM  : num 74896988
##  $ HthCost_NM : num 425144
##  $ CapCost_NM : num 0
##  $ IstCost_NM : num 2070822
##  $ TotExp_NM  : num 87848677
##  $ GrsMrg_NM  : num 92529219
##  $ .NM        : num 2199927
##  $ B_JF       : num 0
##  $ Gi_JF      : num 345137
##  $ Go_JF      : num 319329
##  $ D_JF       : num 19892
##  $ O_JF       : num 6387
##  $ C_JF       : num 0
##  $ sum_JF     : num 690744
##  $ come_JF    : num 345137
##  $ leave_JF   : num 345607
##  $ diff_JF    : num -470
##  $ new_JF     : num 1915501
##  $ NOftk_JF   : num 6387
##  $ PopGro_JF  : num -470
##  $ TotNChg_JF : num 5917
##  $ TotMort_JF : num 19892
##  $ QLwKg_JF   : num 43421573
##  $ OftkLw_JF  : num 130170
##  $ QMeat_JF   : num 54671
##  $ QManu_JF   : num 11493008
##  $ QHides_JF  : num 9946
##  $ QMilk_JF   : num 0
##  $ QWool_JF   : num 0
##  $ CumDM_JF   : num 26557009
##   [list output truncated]

get column names without suffix

prf = names(out) [ 1 : (length(out)/length(.t)) ] #%>%
 #%>% str
prf = gsub( .t [[1]] , "", prf)

prf
##  [1] "B_"        "Gi_"       "Go_"       "D_"        "O_"        "C_"       
##  [7] "sum_"      "come_"     "leave_"    "diff_"     "new_"      "NOftk_"   
## [13] "PopGro_"   "TotNChg_"  "TotMort_"  "QLwKg_"    "OftkLw_"   "QMeat_"   
## [19] "QManu_"    "QHides_"   "QMilk_"    "QWool_"    "CumDM_"    "ValOftk_" 
## [25] "ValHerd_"  "TotVal_"   "ValManu_"  "ValHides_" "ValMilk_"  "ProdVal_" 
## [31] "FdCost_"   "LbCost_"   "HthCost_"  "CapCost_"  "IstCost_"  "TotExp_"  
## [37] "GrsMrg_"   "."

create suffixes for combined results of subgroups

tags = c("", "Overall", paste0(cats, "Com")) #%>%
tags
## [1] ""        "Overall" "NCom"    "JCom"    "ACom"    "FCom"    "MCom"

create a list of character vectors of the column names for combined subgroups

tags = map(tags, ~ paste0(prf, .x))

#tags %>% head

tags %>% str
## List of 7
##  $ : chr [1:38] "B_" "Gi_" "Go_" "D_" ...
##  $ : chr [1:38] "B_Overall" "Gi_Overall" "Go_Overall" "D_Overall" ...
##  $ : chr [1:38] "B_NCom" "Gi_NCom" "Go_NCom" "D_NCom" ...
##  $ : chr [1:38] "B_JCom" "Gi_JCom" "Go_JCom" "D_JCom" ...
##  $ : chr [1:38] "B_ACom" "Gi_ACom" "Go_ACom" "D_ACom" ...
##  $ : chr [1:38] "B_FCom" "Gi_FCom" "Go_FCom" "D_FCom" ...
##  $ : chr [1:38] "B_MCom" "Gi_MCom" "Go_MCom" "D_MCom" ...

calculate the combined results of subgroups

Select model results (columns of age-sex categories) of the same prefix. And calculate the total. And multiply the selected model results by the binary tests of N, J, A, F, M respectively, and respectively calculate the sum. Then create the data frame which contains the selected model results, the total, and the combined results of subgroups. And then update the column names with the character strings in the tags object.

subtot = pmap(tags, 
              function(p, o, 
                       n, j, a, f, m
              ){
                
                df = out %>% select(starts_with(p)) 
                
                rs = rowSums(df) 
                
                mp = map(.l, 
                         
                         function(x) apply(df, 1, 
                                           function(y) (unlist(x) * y) %>% sum
                         )
                         
                ) %>% data.frame
                
                DF = data.frame(df, rs, mp) 
                
                names(DF) [ - c(1 : length(.t)) ] <- c(o, n, j, a, f, m)
                
                DF
                
              }
) %>% data.frame 

#subtot %>% head

subtot %>% str
## 'data.frame':    1 obs. of  456 variables:
##  $ B_NF            : num 521508
##  $ B_NM            : num 521508
##  $ B_JF            : num 0
##  $ B_JM            : num 0
##  $ B_AF            : num 0
##  $ B_AM            : num 0
##  $ B_Overall       : num 1043017
##  $ B_NCom          : num 1043017
##  $ B_JCom          : num 0
##  $ B_ACom          : num 0
##  $ B_FCom          : num 521508
##  $ B_MCom          : num 521508
##  $ Gi_NF           : num 0
##  $ Gi_NM           : num 0
##  $ Gi_JF           : num 345137
##  $ Gi_JM           : num 345137
##  $ Gi_AF           : num 319329
##  $ Gi_AM           : num 191231
##  $ Gi_Overall      : num 1200834
##  $ Gi_NCom         : num 0
##  $ Gi_JCom         : num 690274
##  $ Gi_ACom         : num 510560
##  $ Gi_FCom         : num 664466
##  $ Gi_MCom         : num 536368
##  $ Go_NF           : num 345137
##  $ Go_NM           : num 345137
##  $ Go_JF           : num 319329
##  $ Go_JM           : num 191231
##  $ Go_AF           : num 0
##  $ Go_AM           : num 0
##  $ Go_Overall      : num 1200834
##  $ Go_NCom         : num 690274
##  $ Go_JCom         : num 510560
##  $ Go_ACom         : num 0
##  $ Go_FCom         : num 664466
##  $ Go_MCom         : num 536368
##  $ D_NF            : num 47266
##  $ D_NM            : num 47266
##  $ D_JF            : num 19892
##  $ D_JM            : num 11912
##  $ D_AF            : num 60906
##  $ D_AM            : num 14665
##  $ D_Overall       : num 201908
##  $ D_NCom          : num 94533
##  $ D_JCom          : num 31804
##  $ D_ACom          : num 75571
##  $ D_FCom          : num 128064
##  $ D_MCom          : num 73844
##  $ O_NF            : num 0
##  $ O_NM            : num 0
##  $ O_JF            : num 6387
##  $ O_JM            : num 51632
##  $ O_AF            : num 46832
##  $ O_AM            : num 137192
##  $ O_Overall       : num 242043
##  $ O_NCom          : num 0
##  $ O_JCom          : num 58019
##  $ O_ACom          : num 184024
##  $ O_FCom          : num 53219
##  $ O_MCom          : num 188825
##  $ C_NF            : num 0
##  $ C_NM            : num 0
##  $ C_JF            : num 0
##  $ C_JM            : num 0
##  $ C_AF            : num 130089
##  $ C_AM            : num 63515
##  $ C_Overall       : num 193604
##  $ C_NCom          : num 0
##  $ C_JCom          : num 0
##  $ C_ACom          : num 193604
##  $ C_FCom          : num 130089
##  $ C_MCom          : num 63515
##  $ sum_NF          : num 913912
##  $ sum_NM          : num 913912
##  $ sum_JF          : num 690744
##  $ sum_JM          : num 6e+05
##  $ sum_AF          : num 557156
##  $ sum_AM          : num 406603
##  $ sum_Overall     : num 4082239
##  $ sum_NCom        : num 1827824
##  $ sum_JCom        : num 1290656
##  $ sum_ACom        : num 963759
##  $ sum_FCom        : num 2161812
##  $ sum_MCom        : num 1920428
##  $ come_NF         : num 521508
##  $ come_NM         : num 521508
##  $ come_JF         : num 345137
##  $ come_JM         : num 345137
##  $ come_AF         : num 319329
##  $ come_AM         : num 191231
##  $ come_Overall    : num 2243850
##  $ come_NCom       : num 1043017
##  $ come_JCom       : num 690274
##  $ come_ACom       : num 510560
##  $ come_FCom       : num 1185974
##  $ come_MCom       : num 1057876
##  $ leave_NF        : num 392403
##  $ leave_NM        : num 392403
##  $ leave_JF        : num 345607
##   [list output truncated]

select columns for which cumulative sum will not be calculated

Such as the population sizes and the quantity of liveweight in Kg.

xc = subtot %>% select(starts_with(c(".", "new", "QLwKg"))) # %>%

#xc %>%head()

xc %>% str()
## 'data.frame':    1 obs. of  36 variables:
##  $ .NF          : num 2199927
##  $ .NM          : num 2199927
##  $ .JF          : num 1915501
##  $ .JM          : num 1237747
##  $ .AF          : num 14131130
##  $ .AM          : num 3024574
##  $ .Overall     : num 24708807
##  $ .NCom        : num 4399854
##  $ .JCom        : num 3153249
##  $ .ACom        : num 17155704
##  $ .FCom        : num 18246558
##  $ .MCom        : num 6462248
##  $ new_NF       : num 2199927
##  $ new_NM       : num 2199927
##  $ new_JF       : num 1915501
##  $ new_JM       : num 1237747
##  $ new_AF       : num 14131130
##  $ new_AM       : num 3024574
##  $ new_Overall  : num 24708807
##  $ new_NCom     : num 4399854
##  $ new_JCom     : num 3153249
##  $ new_ACom     : num 17155704
##  $ new_FCom     : num 18246558
##  $ new_MCom     : num 6462248
##  $ QLwKg_NF     : num 27561560
##  $ QLwKg_NM     : num 27100061
##  $ QLwKg_JF     : num 43421573
##  $ QLwKg_JM     : num 26889656
##  $ QLwKg_AF     : num 4.13e+08
##  $ QLwKg_AM     : num 83659455
##  $ QLwKg_Overall: num 6.21e+08
##  $ QLwKg_NCom   : num 54661621
##  $ QLwKg_JCom   : num 70311230
##  $ QLwKg_ACom   : num 4.96e+08
##  $ QLwKg_FCom   : num 4.84e+08
##  $ QLwKg_MCom   : num 1.38e+08

extract the column names for which cumulative sum will not be calculated

xc = names( xc )
xc
##  [1] ".NF"           ".NM"           ".JF"           ".JM"          
##  [5] ".AF"           ".AM"           ".Overall"      ".NCom"        
##  [9] ".JCom"         ".ACom"         ".FCom"         ".MCom"        
## [13] "new_NF"        "new_NM"        "new_JF"        "new_JM"       
## [17] "new_AF"        "new_AM"        "new_Overall"   "new_NCom"     
## [21] "new_JCom"      "new_ACom"      "new_FCom"      "new_MCom"     
## [25] "QLwKg_NF"      "QLwKg_NM"      "QLwKg_JF"      "QLwKg_JM"     
## [29] "QLwKg_AF"      "QLwKg_AM"      "QLwKg_Overall" "QLwKg_NCom"   
## [33] "QLwKg_JCom"    "QLwKg_ACom"    "QLwKg_FCom"    "QLwKg_MCom"

calculate cumulative sum for other variables (columns)

variables (columns) other than population sizes and the quantity of liveweight.

OUT = subtot %>% mutate_if( ! names(.) %in% xc, cumsum)

#OUT  %>%head

OUT  %>% str
## 'data.frame':    1 obs. of  456 variables:
##  $ B_NF            : num 521508
##  $ B_NM            : num 521508
##  $ B_JF            : num 0
##  $ B_JM            : num 0
##  $ B_AF            : num 0
##  $ B_AM            : num 0
##  $ B_Overall       : num 1043017
##  $ B_NCom          : num 1043017
##  $ B_JCom          : num 0
##  $ B_ACom          : num 0
##  $ B_FCom          : num 521508
##  $ B_MCom          : num 521508
##  $ Gi_NF           : num 0
##  $ Gi_NM           : num 0
##  $ Gi_JF           : num 345137
##  $ Gi_JM           : num 345137
##  $ Gi_AF           : num 319329
##  $ Gi_AM           : num 191231
##  $ Gi_Overall      : num 1200834
##  $ Gi_NCom         : num 0
##  $ Gi_JCom         : num 690274
##  $ Gi_ACom         : num 510560
##  $ Gi_FCom         : num 664466
##  $ Gi_MCom         : num 536368
##  $ Go_NF           : num 345137
##  $ Go_NM           : num 345137
##  $ Go_JF           : num 319329
##  $ Go_JM           : num 191231
##  $ Go_AF           : num 0
##  $ Go_AM           : num 0
##  $ Go_Overall      : num 1200834
##  $ Go_NCom         : num 690274
##  $ Go_JCom         : num 510560
##  $ Go_ACom         : num 0
##  $ Go_FCom         : num 664466
##  $ Go_MCom         : num 536368
##  $ D_NF            : num 47266
##  $ D_NM            : num 47266
##  $ D_JF            : num 19892
##  $ D_JM            : num 11912
##  $ D_AF            : num 60906
##  $ D_AM            : num 14665
##  $ D_Overall       : num 201908
##  $ D_NCom          : num 94533
##  $ D_JCom          : num 31804
##  $ D_ACom          : num 75571
##  $ D_FCom          : num 128064
##  $ D_MCom          : num 73844
##  $ O_NF            : num 0
##  $ O_NM            : num 0
##  $ O_JF            : num 6387
##  $ O_JM            : num 51632
##  $ O_AF            : num 46832
##  $ O_AM            : num 137192
##  $ O_Overall       : num 242043
##  $ O_NCom          : num 0
##  $ O_JCom          : num 58019
##  $ O_ACom          : num 184024
##  $ O_FCom          : num 53219
##  $ O_MCom          : num 188825
##  $ C_NF            : num 0
##  $ C_NM            : num 0
##  $ C_JF            : num 0
##  $ C_JM            : num 0
##  $ C_AF            : num 130089
##  $ C_AM            : num 63515
##  $ C_Overall       : num 193604
##  $ C_NCom          : num 0
##  $ C_JCom          : num 0
##  $ C_ACom          : num 193604
##  $ C_FCom          : num 130089
##  $ C_MCom          : num 63515
##  $ sum_NF          : num 913912
##  $ sum_NM          : num 913912
##  $ sum_JF          : num 690744
##  $ sum_JM          : num 6e+05
##  $ sum_AF          : num 557156
##  $ sum_AM          : num 406603
##  $ sum_Overall     : num 4082239
##  $ sum_NCom        : num 1827824
##  $ sum_JCom        : num 1290656
##  $ sum_ACom        : num 963759
##  $ sum_FCom        : num 2161812
##  $ sum_MCom        : num 1920428
##  $ come_NF         : num 521508
##  $ come_NM         : num 521508
##  $ come_JF         : num 345137
##  $ come_JM         : num 345137
##  $ come_AF         : num 319329
##  $ come_AM         : num 191231
##  $ come_Overall    : num 2243850
##  $ come_NCom       : num 1043017
##  $ come_JCom       : num 690274
##  $ come_ACom       : num 510560
##  $ come_FCom       : num 1185974
##  $ come_MCom       : num 1057876
##  $ leave_NF        : num 392403
##  $ leave_NM        : num 392403
##  $ leave_JF        : num 345607
##   [list output truncated]
#}

abind and apply

Combine multi-dimensional arrays of model results if more than one set of model results. And compute statistical parameters (e.g., mean) for the nruns number of each “production parameter” for each month.

ou = map(
  
  list(mean, 
       sd, 
       min, 
       function(x) quantile(x, .25), 
       median,
       function(x) quantile(x, .75), 
       max
  ),
  
  function(x) abind(OUT, along = 3) %>%
    apply(., 1:2, x) %>% 
    as.data.frame
  
)

#ou %>% head

ou %>% str
## List of 7
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num NA
##   ..$ B_NM            : num NA
##   ..$ B_JF            : num NA
##   ..$ B_JM            : num NA
##   ..$ B_AF            : num NA
##   ..$ B_AM            : num NA
##   ..$ B_Overall       : num NA
##   ..$ B_NCom          : num NA
##   ..$ B_JCom          : num NA
##   ..$ B_ACom          : num NA
##   ..$ B_FCom          : num NA
##   ..$ B_MCom          : num NA
##   ..$ Gi_NF           : num NA
##   ..$ Gi_NM           : num NA
##   ..$ Gi_JF           : num NA
##   ..$ Gi_JM           : num NA
##   ..$ Gi_AF           : num NA
##   ..$ Gi_AM           : num NA
##   ..$ Gi_Overall      : num NA
##   ..$ Gi_NCom         : num NA
##   ..$ Gi_JCom         : num NA
##   ..$ Gi_ACom         : num NA
##   ..$ Gi_FCom         : num NA
##   ..$ Gi_MCom         : num NA
##   ..$ Go_NF           : num NA
##   ..$ Go_NM           : num NA
##   ..$ Go_JF           : num NA
##   ..$ Go_JM           : num NA
##   ..$ Go_AF           : num NA
##   ..$ Go_AM           : num NA
##   ..$ Go_Overall      : num NA
##   ..$ Go_NCom         : num NA
##   ..$ Go_JCom         : num NA
##   ..$ Go_ACom         : num NA
##   ..$ Go_FCom         : num NA
##   ..$ Go_MCom         : num NA
##   ..$ D_NF            : num NA
##   ..$ D_NM            : num NA
##   ..$ D_JF            : num NA
##   ..$ D_JM            : num NA
##   ..$ D_AF            : num NA
##   ..$ D_AM            : num NA
##   ..$ D_Overall       : num NA
##   ..$ D_NCom          : num NA
##   ..$ D_JCom          : num NA
##   ..$ D_ACom          : num NA
##   ..$ D_FCom          : num NA
##   ..$ D_MCom          : num NA
##   ..$ O_NF            : num NA
##   ..$ O_NM            : num NA
##   ..$ O_JF            : num NA
##   ..$ O_JM            : num NA
##   ..$ O_AF            : num NA
##   ..$ O_AM            : num NA
##   ..$ O_Overall       : num NA
##   ..$ O_NCom          : num NA
##   ..$ O_JCom          : num NA
##   ..$ O_ACom          : num NA
##   ..$ O_FCom          : num NA
##   ..$ O_MCom          : num NA
##   ..$ C_NF            : num NA
##   ..$ C_NM            : num NA
##   ..$ C_JF            : num NA
##   ..$ C_JM            : num NA
##   ..$ C_AF            : num NA
##   ..$ C_AM            : num NA
##   ..$ C_Overall       : num NA
##   ..$ C_NCom          : num NA
##   ..$ C_JCom          : num NA
##   ..$ C_ACom          : num NA
##   ..$ C_FCom          : num NA
##   ..$ C_MCom          : num NA
##   ..$ sum_NF          : num NA
##   ..$ sum_NM          : num NA
##   ..$ sum_JF          : num NA
##   ..$ sum_JM          : num NA
##   ..$ sum_AF          : num NA
##   ..$ sum_AM          : num NA
##   ..$ sum_Overall     : num NA
##   ..$ sum_NCom        : num NA
##   ..$ sum_JCom        : num NA
##   ..$ sum_ACom        : num NA
##   ..$ sum_FCom        : num NA
##   ..$ sum_MCom        : num NA
##   ..$ come_NF         : num NA
##   ..$ come_NM         : num NA
##   ..$ come_JF         : num NA
##   ..$ come_JM         : num NA
##   ..$ come_AF         : num NA
##   ..$ come_AM         : num NA
##   ..$ come_Overall    : num NA
##   ..$ come_NCom       : num NA
##   ..$ come_JCom       : num NA
##   ..$ come_ACom       : num NA
##   ..$ come_FCom       : num NA
##   ..$ come_MCom       : num NA
##   ..$ leave_NF        : num NA
##   ..$ leave_NM        : num NA
##   ..$ leave_JF        : num NA
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]

extract result of the final month

For each statistical parameter, only present the result of the final month.

ou= ou %>% map(., ~ .x [ Num_months , ] ) # %>% 

#ou %>% head
ou %>% str
## List of 7
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num NA
##   ..$ B_NM            : num NA
##   ..$ B_JF            : num NA
##   ..$ B_JM            : num NA
##   ..$ B_AF            : num NA
##   ..$ B_AM            : num NA
##   ..$ B_Overall       : num NA
##   ..$ B_NCom          : num NA
##   ..$ B_JCom          : num NA
##   ..$ B_ACom          : num NA
##   ..$ B_FCom          : num NA
##   ..$ B_MCom          : num NA
##   ..$ Gi_NF           : num NA
##   ..$ Gi_NM           : num NA
##   ..$ Gi_JF           : num NA
##   ..$ Gi_JM           : num NA
##   ..$ Gi_AF           : num NA
##   ..$ Gi_AM           : num NA
##   ..$ Gi_Overall      : num NA
##   ..$ Gi_NCom         : num NA
##   ..$ Gi_JCom         : num NA
##   ..$ Gi_ACom         : num NA
##   ..$ Gi_FCom         : num NA
##   ..$ Gi_MCom         : num NA
##   ..$ Go_NF           : num NA
##   ..$ Go_NM           : num NA
##   ..$ Go_JF           : num NA
##   ..$ Go_JM           : num NA
##   ..$ Go_AF           : num NA
##   ..$ Go_AM           : num NA
##   ..$ Go_Overall      : num NA
##   ..$ Go_NCom         : num NA
##   ..$ Go_JCom         : num NA
##   ..$ Go_ACom         : num NA
##   ..$ Go_FCom         : num NA
##   ..$ Go_MCom         : num NA
##   ..$ D_NF            : num NA
##   ..$ D_NM            : num NA
##   ..$ D_JF            : num NA
##   ..$ D_JM            : num NA
##   ..$ D_AF            : num NA
##   ..$ D_AM            : num NA
##   ..$ D_Overall       : num NA
##   ..$ D_NCom          : num NA
##   ..$ D_JCom          : num NA
##   ..$ D_ACom          : num NA
##   ..$ D_FCom          : num NA
##   ..$ D_MCom          : num NA
##   ..$ O_NF            : num NA
##   ..$ O_NM            : num NA
##   ..$ O_JF            : num NA
##   ..$ O_JM            : num NA
##   ..$ O_AF            : num NA
##   ..$ O_AM            : num NA
##   ..$ O_Overall       : num NA
##   ..$ O_NCom          : num NA
##   ..$ O_JCom          : num NA
##   ..$ O_ACom          : num NA
##   ..$ O_FCom          : num NA
##   ..$ O_MCom          : num NA
##   ..$ C_NF            : num NA
##   ..$ C_NM            : num NA
##   ..$ C_JF            : num NA
##   ..$ C_JM            : num NA
##   ..$ C_AF            : num NA
##   ..$ C_AM            : num NA
##   ..$ C_Overall       : num NA
##   ..$ C_NCom          : num NA
##   ..$ C_JCom          : num NA
##   ..$ C_ACom          : num NA
##   ..$ C_FCom          : num NA
##   ..$ C_MCom          : num NA
##   ..$ sum_NF          : num NA
##   ..$ sum_NM          : num NA
##   ..$ sum_JF          : num NA
##   ..$ sum_JM          : num NA
##   ..$ sum_AF          : num NA
##   ..$ sum_AM          : num NA
##   ..$ sum_Overall     : num NA
##   ..$ sum_NCom        : num NA
##   ..$ sum_JCom        : num NA
##   ..$ sum_ACom        : num NA
##   ..$ sum_FCom        : num NA
##   ..$ sum_MCom        : num NA
##   ..$ come_NF         : num NA
##   ..$ come_NM         : num NA
##   ..$ come_JF         : num NA
##   ..$ come_JM         : num NA
##   ..$ come_AF         : num NA
##   ..$ come_AM         : num NA
##   ..$ come_Overall    : num NA
##   ..$ come_NCom       : num NA
##   ..$ come_JCom       : num NA
##   ..$ come_ACom       : num NA
##   ..$ come_FCom       : num NA
##   ..$ come_MCom       : num NA
##   ..$ leave_NF        : num NA
##   ..$ leave_NM        : num NA
##   ..$ leave_JF        : num NA
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]
##  $ :'data.frame':    1 obs. of  456 variables:
##   ..$ B_NF            : num 521508
##   ..$ B_NM            : num 521508
##   ..$ B_JF            : num 0
##   ..$ B_JM            : num 0
##   ..$ B_AF            : num 0
##   ..$ B_AM            : num 0
##   ..$ B_Overall       : num 1043017
##   ..$ B_NCom          : num 1043017
##   ..$ B_JCom          : num 0
##   ..$ B_ACom          : num 0
##   ..$ B_FCom          : num 521508
##   ..$ B_MCom          : num 521508
##   ..$ Gi_NF           : num 0
##   ..$ Gi_NM           : num 0
##   ..$ Gi_JF           : num 345137
##   ..$ Gi_JM           : num 345137
##   ..$ Gi_AF           : num 319329
##   ..$ Gi_AM           : num 191231
##   ..$ Gi_Overall      : num 1200834
##   ..$ Gi_NCom         : num 0
##   ..$ Gi_JCom         : num 690274
##   ..$ Gi_ACom         : num 510560
##   ..$ Gi_FCom         : num 664466
##   ..$ Gi_MCom         : num 536368
##   ..$ Go_NF           : num 345137
##   ..$ Go_NM           : num 345137
##   ..$ Go_JF           : num 319329
##   ..$ Go_JM           : num 191231
##   ..$ Go_AF           : num 0
##   ..$ Go_AM           : num 0
##   ..$ Go_Overall      : num 1200834
##   ..$ Go_NCom         : num 690274
##   ..$ Go_JCom         : num 510560
##   ..$ Go_ACom         : num 0
##   ..$ Go_FCom         : num 664466
##   ..$ Go_MCom         : num 536368
##   ..$ D_NF            : num 47266
##   ..$ D_NM            : num 47266
##   ..$ D_JF            : num 19892
##   ..$ D_JM            : num 11912
##   ..$ D_AF            : num 60906
##   ..$ D_AM            : num 14665
##   ..$ D_Overall       : num 201908
##   ..$ D_NCom          : num 94533
##   ..$ D_JCom          : num 31804
##   ..$ D_ACom          : num 75571
##   ..$ D_FCom          : num 128064
##   ..$ D_MCom          : num 73844
##   ..$ O_NF            : num 0
##   ..$ O_NM            : num 0
##   ..$ O_JF            : num 6387
##   ..$ O_JM            : num 51632
##   ..$ O_AF            : num 46832
##   ..$ O_AM            : num 137192
##   ..$ O_Overall       : num 242043
##   ..$ O_NCom          : num 0
##   ..$ O_JCom          : num 58019
##   ..$ O_ACom          : num 184024
##   ..$ O_FCom          : num 53219
##   ..$ O_MCom          : num 188825
##   ..$ C_NF            : num 0
##   ..$ C_NM            : num 0
##   ..$ C_JF            : num 0
##   ..$ C_JM            : num 0
##   ..$ C_AF            : num 130089
##   ..$ C_AM            : num 63515
##   ..$ C_Overall       : num 193604
##   ..$ C_NCom          : num 0
##   ..$ C_JCom          : num 0
##   ..$ C_ACom          : num 193604
##   ..$ C_FCom          : num 130089
##   ..$ C_MCom          : num 63515
##   ..$ sum_NF          : num 913912
##   ..$ sum_NM          : num 913912
##   ..$ sum_JF          : num 690744
##   ..$ sum_JM          : num 6e+05
##   ..$ sum_AF          : num 557156
##   ..$ sum_AM          : num 406603
##   ..$ sum_Overall     : num 4082239
##   ..$ sum_NCom        : num 1827824
##   ..$ sum_JCom        : num 1290656
##   ..$ sum_ACom        : num 963759
##   ..$ sum_FCom        : num 2161812
##   ..$ sum_MCom        : num 1920428
##   ..$ come_NF         : num 521508
##   ..$ come_NM         : num 521508
##   ..$ come_JF         : num 345137
##   ..$ come_JM         : num 345137
##   ..$ come_AF         : num 319329
##   ..$ come_AM         : num 191231
##   ..$ come_Overall    : num 2243850
##   ..$ come_NCom       : num 1043017
##   ..$ come_JCom       : num 690274
##   ..$ come_ACom       : num 510560
##   ..$ come_FCom       : num 1185974
##   ..$ come_MCom       : num 1057876
##   ..$ leave_NF        : num 392403
##   ..$ leave_NM        : num 392403
##   ..$ leave_JF        : num 345607
##   .. [list output truncated]

binding rows of the results

ou= do.call(rbind, ou) # %>%

#ou %>% head

ou%>% str
## 'data.frame':    7 obs. of  456 variables:
##  $ B_NF            : num  521508 NA 521508 521508 521508 ...
##  $ B_NM            : num  521508 NA 521508 521508 521508 ...
##  $ B_JF            : num  0 NA 0 0 0 0 0
##  $ B_JM            : num  0 NA 0 0 0 0 0
##  $ B_AF            : num  0 NA 0 0 0 0 0
##  $ B_AM            : num  0 NA 0 0 0 0 0
##  $ B_Overall       : num  1043017 NA 1043017 1043017 1043017 ...
##  $ B_NCom          : num  1043017 NA 1043017 1043017 1043017 ...
##  $ B_JCom          : num  0 NA 0 0 0 0 0
##  $ B_ACom          : num  0 NA 0 0 0 0 0
##  $ B_FCom          : num  521508 NA 521508 521508 521508 ...
##  $ B_MCom          : num  521508 NA 521508 521508 521508 ...
##  $ Gi_NF           : num  0 NA 0 0 0 0 0
##  $ Gi_NM           : num  0 NA 0 0 0 0 0
##  $ Gi_JF           : num  345137 NA 345137 345137 345137 ...
##  $ Gi_JM           : num  345137 NA 345137 345137 345137 ...
##  $ Gi_AF           : num  319329 NA 319329 319329 319329 ...
##  $ Gi_AM           : num  191231 NA 191231 191231 191231 ...
##  $ Gi_Overall      : num  1200834 NA 1200834 1200834 1200834 ...
##  $ Gi_NCom         : num  0 NA 0 0 0 0 0
##  $ Gi_JCom         : num  690274 NA 690274 690274 690274 ...
##  $ Gi_ACom         : num  510560 NA 510560 510560 510560 ...
##  $ Gi_FCom         : num  664466 NA 664466 664466 664466 ...
##  $ Gi_MCom         : num  536368 NA 536368 536368 536368 ...
##  $ Go_NF           : num  345137 NA 345137 345137 345137 ...
##  $ Go_NM           : num  345137 NA 345137 345137 345137 ...
##  $ Go_JF           : num  319329 NA 319329 319329 319329 ...
##  $ Go_JM           : num  191231 NA 191231 191231 191231 ...
##  $ Go_AF           : num  0 NA 0 0 0 0 0
##  $ Go_AM           : num  0 NA 0 0 0 0 0
##  $ Go_Overall      : num  1200834 NA 1200834 1200834 1200834 ...
##  $ Go_NCom         : num  690274 NA 690274 690274 690274 ...
##  $ Go_JCom         : num  510560 NA 510560 510560 510560 ...
##  $ Go_ACom         : num  0 NA 0 0 0 0 0
##  $ Go_FCom         : num  664466 NA 664466 664466 664466 ...
##  $ Go_MCom         : num  536368 NA 536368 536368 536368 ...
##  $ D_NF            : num  47266 NA 47266 47266 47266 ...
##  $ D_NM            : num  47266 NA 47266 47266 47266 ...
##  $ D_JF            : num  19892 NA 19892 19892 19892 ...
##  $ D_JM            : num  11912 NA 11912 11912 11912 ...
##  $ D_AF            : num  60906 NA 60906 60906 60906 ...
##  $ D_AM            : num  14665 NA 14665 14665 14665 ...
##  $ D_Overall       : num  201908 NA 201908 201908 201908 ...
##  $ D_NCom          : num  94533 NA 94533 94533 94533 ...
##  $ D_JCom          : num  31804 NA 31804 31804 31804 ...
##  $ D_ACom          : num  75571 NA 75571 75571 75571 ...
##  $ D_FCom          : num  128064 NA 128064 128064 128064 ...
##  $ D_MCom          : num  73844 NA 73844 73844 73844 ...
##  $ O_NF            : num  0 NA 0 0 0 0 0
##  $ O_NM            : num  0 NA 0 0 0 0 0
##  $ O_JF            : num  6387 NA 6387 6387 6387 ...
##  $ O_JM            : num  51632 NA 51632 51632 51632 ...
##  $ O_AF            : num  46832 NA 46832 46832 46832 ...
##  $ O_AM            : num  137192 NA 137192 137192 137192 ...
##  $ O_Overall       : num  242043 NA 242043 242043 242043 ...
##  $ O_NCom          : num  0 NA 0 0 0 0 0
##  $ O_JCom          : num  58019 NA 58019 58019 58019 ...
##  $ O_ACom          : num  184024 NA 184024 184024 184024 ...
##  $ O_FCom          : num  53219 NA 53219 53219 53219 ...
##  $ O_MCom          : num  188825 NA 188825 188825 188825 ...
##  $ C_NF            : num  0 NA 0 0 0 0 0
##  $ C_NM            : num  0 NA 0 0 0 0 0
##  $ C_JF            : num  0 NA 0 0 0 0 0
##  $ C_JM            : num  0 NA 0 0 0 0 0
##  $ C_AF            : num  130089 NA 130089 130089 130089 ...
##  $ C_AM            : num  63515 NA 63515 63515 63515 ...
##  $ C_Overall       : num  193604 NA 193604 193604 193604 ...
##  $ C_NCom          : num  0 NA 0 0 0 0 0
##  $ C_JCom          : num  0 NA 0 0 0 0 0
##  $ C_ACom          : num  193604 NA 193604 193604 193604 ...
##  $ C_FCom          : num  130089 NA 130089 130089 130089 ...
##  $ C_MCom          : num  63515 NA 63515 63515 63515 ...
##  $ sum_NF          : num  913912 NA 913912 913912 913912 ...
##  $ sum_NM          : num  913912 NA 913912 913912 913912 ...
##  $ sum_JF          : num  690744 NA 690744 690744 690744 ...
##  $ sum_JM          : num  6e+05 NA 6e+05 6e+05 6e+05 ...
##  $ sum_AF          : num  557156 NA 557156 557156 557156 ...
##  $ sum_AM          : num  406603 NA 406603 406603 406603 ...
##  $ sum_Overall     : num  4082239 NA 4082239 4082239 4082239 ...
##  $ sum_NCom        : num  1827824 NA 1827824 1827824 1827824 ...
##  $ sum_JCom        : num  1290656 NA 1290656 1290656 1290656 ...
##  $ sum_ACom        : num  963759 NA 963759 963759 963759 ...
##  $ sum_FCom        : num  2161812 NA 2161812 2161812 2161812 ...
##  $ sum_MCom        : num  1920428 NA 1920428 1920428 1920428 ...
##  $ come_NF         : num  521508 NA 521508 521508 521508 ...
##  $ come_NM         : num  521508 NA 521508 521508 521508 ...
##  $ come_JF         : num  345137 NA 345137 345137 345137 ...
##  $ come_JM         : num  345137 NA 345137 345137 345137 ...
##  $ come_AF         : num  319329 NA 319329 319329 319329 ...
##  $ come_AM         : num  191231 NA 191231 191231 191231 ...
##  $ come_Overall    : num  2243850 NA 2243850 2243850 2243850 ...
##  $ come_NCom       : num  1043017 NA 1043017 1043017 1043017 ...
##  $ come_JCom       : num  690274 NA 690274 690274 690274 ...
##  $ come_ACom       : num  510560 NA 510560 510560 510560 ...
##  $ come_FCom       : num  1185974 NA 1185974 1185974 1185974 ...
##  $ come_MCom       : num  1057876 NA 1057876 1057876 1057876 ...
##  $ leave_NF        : num  392403 NA 392403 392403 392403 ...
##  $ leave_NM        : num  392403 NA 392403 392403 392403 ...
##  $ leave_JF        : num  345607 NA 345607 345607 345607 ...
##   [list output truncated]

add a column with names of the statistical parameters (e.g., mean)

ou= mutate(ou, var_name = c("Mean", "StDev", "Min", "Q1", "Median", "Q3", "Max")) #%>% 

#ou %>% head

ou%>% str
## 'data.frame':    7 obs. of  457 variables:
##  $ B_NF            : num  521508 NA 521508 521508 521508 ...
##  $ B_NM            : num  521508 NA 521508 521508 521508 ...
##  $ B_JF            : num  0 NA 0 0 0 0 0
##  $ B_JM            : num  0 NA 0 0 0 0 0
##  $ B_AF            : num  0 NA 0 0 0 0 0
##  $ B_AM            : num  0 NA 0 0 0 0 0
##  $ B_Overall       : num  1043017 NA 1043017 1043017 1043017 ...
##  $ B_NCom          : num  1043017 NA 1043017 1043017 1043017 ...
##  $ B_JCom          : num  0 NA 0 0 0 0 0
##  $ B_ACom          : num  0 NA 0 0 0 0 0
##  $ B_FCom          : num  521508 NA 521508 521508 521508 ...
##  $ B_MCom          : num  521508 NA 521508 521508 521508 ...
##  $ Gi_NF           : num  0 NA 0 0 0 0 0
##  $ Gi_NM           : num  0 NA 0 0 0 0 0
##  $ Gi_JF           : num  345137 NA 345137 345137 345137 ...
##  $ Gi_JM           : num  345137 NA 345137 345137 345137 ...
##  $ Gi_AF           : num  319329 NA 319329 319329 319329 ...
##  $ Gi_AM           : num  191231 NA 191231 191231 191231 ...
##  $ Gi_Overall      : num  1200834 NA 1200834 1200834 1200834 ...
##  $ Gi_NCom         : num  0 NA 0 0 0 0 0
##  $ Gi_JCom         : num  690274 NA 690274 690274 690274 ...
##  $ Gi_ACom         : num  510560 NA 510560 510560 510560 ...
##  $ Gi_FCom         : num  664466 NA 664466 664466 664466 ...
##  $ Gi_MCom         : num  536368 NA 536368 536368 536368 ...
##  $ Go_NF           : num  345137 NA 345137 345137 345137 ...
##  $ Go_NM           : num  345137 NA 345137 345137 345137 ...
##  $ Go_JF           : num  319329 NA 319329 319329 319329 ...
##  $ Go_JM           : num  191231 NA 191231 191231 191231 ...
##  $ Go_AF           : num  0 NA 0 0 0 0 0
##  $ Go_AM           : num  0 NA 0 0 0 0 0
##  $ Go_Overall      : num  1200834 NA 1200834 1200834 1200834 ...
##  $ Go_NCom         : num  690274 NA 690274 690274 690274 ...
##  $ Go_JCom         : num  510560 NA 510560 510560 510560 ...
##  $ Go_ACom         : num  0 NA 0 0 0 0 0
##  $ Go_FCom         : num  664466 NA 664466 664466 664466 ...
##  $ Go_MCom         : num  536368 NA 536368 536368 536368 ...
##  $ D_NF            : num  47266 NA 47266 47266 47266 ...
##  $ D_NM            : num  47266 NA 47266 47266 47266 ...
##  $ D_JF            : num  19892 NA 19892 19892 19892 ...
##  $ D_JM            : num  11912 NA 11912 11912 11912 ...
##  $ D_AF            : num  60906 NA 60906 60906 60906 ...
##  $ D_AM            : num  14665 NA 14665 14665 14665 ...
##  $ D_Overall       : num  201908 NA 201908 201908 201908 ...
##  $ D_NCom          : num  94533 NA 94533 94533 94533 ...
##  $ D_JCom          : num  31804 NA 31804 31804 31804 ...
##  $ D_ACom          : num  75571 NA 75571 75571 75571 ...
##  $ D_FCom          : num  128064 NA 128064 128064 128064 ...
##  $ D_MCom          : num  73844 NA 73844 73844 73844 ...
##  $ O_NF            : num  0 NA 0 0 0 0 0
##  $ O_NM            : num  0 NA 0 0 0 0 0
##  $ O_JF            : num  6387 NA 6387 6387 6387 ...
##  $ O_JM            : num  51632 NA 51632 51632 51632 ...
##  $ O_AF            : num  46832 NA 46832 46832 46832 ...
##  $ O_AM            : num  137192 NA 137192 137192 137192 ...
##  $ O_Overall       : num  242043 NA 242043 242043 242043 ...
##  $ O_NCom          : num  0 NA 0 0 0 0 0
##  $ O_JCom          : num  58019 NA 58019 58019 58019 ...
##  $ O_ACom          : num  184024 NA 184024 184024 184024 ...
##  $ O_FCom          : num  53219 NA 53219 53219 53219 ...
##  $ O_MCom          : num  188825 NA 188825 188825 188825 ...
##  $ C_NF            : num  0 NA 0 0 0 0 0
##  $ C_NM            : num  0 NA 0 0 0 0 0
##  $ C_JF            : num  0 NA 0 0 0 0 0
##  $ C_JM            : num  0 NA 0 0 0 0 0
##  $ C_AF            : num  130089 NA 130089 130089 130089 ...
##  $ C_AM            : num  63515 NA 63515 63515 63515 ...
##  $ C_Overall       : num  193604 NA 193604 193604 193604 ...
##  $ C_NCom          : num  0 NA 0 0 0 0 0
##  $ C_JCom          : num  0 NA 0 0 0 0 0
##  $ C_ACom          : num  193604 NA 193604 193604 193604 ...
##  $ C_FCom          : num  130089 NA 130089 130089 130089 ...
##  $ C_MCom          : num  63515 NA 63515 63515 63515 ...
##  $ sum_NF          : num  913912 NA 913912 913912 913912 ...
##  $ sum_NM          : num  913912 NA 913912 913912 913912 ...
##  $ sum_JF          : num  690744 NA 690744 690744 690744 ...
##  $ sum_JM          : num  6e+05 NA 6e+05 6e+05 6e+05 ...
##  $ sum_AF          : num  557156 NA 557156 557156 557156 ...
##  $ sum_AM          : num  406603 NA 406603 406603 406603 ...
##  $ sum_Overall     : num  4082239 NA 4082239 4082239 4082239 ...
##  $ sum_NCom        : num  1827824 NA 1827824 1827824 1827824 ...
##  $ sum_JCom        : num  1290656 NA 1290656 1290656 1290656 ...
##  $ sum_ACom        : num  963759 NA 963759 963759 963759 ...
##  $ sum_FCom        : num  2161812 NA 2161812 2161812 2161812 ...
##  $ sum_MCom        : num  1920428 NA 1920428 1920428 1920428 ...
##  $ come_NF         : num  521508 NA 521508 521508 521508 ...
##  $ come_NM         : num  521508 NA 521508 521508 521508 ...
##  $ come_JF         : num  345137 NA 345137 345137 345137 ...
##  $ come_JM         : num  345137 NA 345137 345137 345137 ...
##  $ come_AF         : num  319329 NA 319329 319329 319329 ...
##  $ come_AM         : num  191231 NA 191231 191231 191231 ...
##  $ come_Overall    : num  2243850 NA 2243850 2243850 2243850 ...
##  $ come_NCom       : num  1043017 NA 1043017 1043017 1043017 ...
##  $ come_JCom       : num  690274 NA 690274 690274 690274 ...
##  $ come_ACom       : num  510560 NA 510560 510560 510560 ...
##  $ come_FCom       : num  1185974 NA 1185974 1185974 1185974 ...
##  $ come_MCom       : num  1057876 NA 1057876 1057876 1057876 ...
##  $ leave_NF        : num  392403 NA 392403 392403 392403 ...
##  $ leave_NM        : num  392403 NA 392403 392403 392403 ...
##  $ leave_JF        : num  345607 NA 345607 345607 345607 ...
##   [list output truncated]

transpose the date frame

ou= transpose(ou, NA, F, "Item", "var_name") #%>%

#ou %>% head

ou%>% str
## 'data.frame':    456 obs. of  8 variables:
##  $ Item  : chr  "B_NF" "B_NM" "B_JF" "B_JM" ...
##  $ Mean  : num  521508 521508 0 0 0 ...
##  $ StDev : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ Min   : num  521508 521508 0 0 0 ...
##  $ Q1    : num  521508 521508 0 0 0 ...
##  $ Median: num  521508 521508 0 0 0 ...
##  $ Q3    : num  521508 521508 0 0 0 ...
##  $ Max   : num  521508 521508 0 0 0 ...

separate a character column (Item) into two columns with a regular expression

ou= separate(ou, Item, c("Item", "Group")) #%>% 

#ou %>% head

ou%>% str
## 'data.frame':    456 obs. of  9 variables:
##  $ Item  : chr  "B" "B" "B" "B" ...
##  $ Group : chr  "NF" "NM" "JF" "JM" ...
##  $ Mean  : num  521508 521508 0 0 0 ...
##  $ StDev : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ Min   : num  521508 521508 0 0 0 ...
##  $ Q1    : num  521508 521508 0 0 0 ...
##  $ Median: num  521508 521508 0 0 0 ...
##  $ Q3    : num  521508 521508 0 0 0 ...
##  $ Max   : num  521508 521508 0 0 0 ...

update the item names and group names

ou= mutate_all(ou, 
               
               function(x){
                 
                 lab=c("B", "Gi", "Go", "D", "O", "C", "sum", "come", "leave", "diff", "new", 
                       "NOftk", "PopGro", "TotNChg", "TotMort", 
                       "QLwKg", "OftkLw", "QMeat", "QManu", "QHides", "QMilk", "QWool", 
                       "CumDM", "ValOftk", "ValHerd", "TotVal", 
                       "ValManu", "ValHides", "ValMilk", "ProdVal", 
                       "FdCost", "LbCost", "HthCost", "CapCost", "IstCost", "TotExp", "GrsMrg", 
                       "NF", "NM", "JF", "JM", "AF", "AM", 
                       "Overall", "NCom", "JCom", "ACom", "FCom", "MCom")
                 
                 name=c("Births", "Growth in", "Growth out", "Deaths", "Offtakes", "Culls", "Sum", "Inflow", "Outflow", "Difference", "Population", 
                        "Num Offtake", "Cml Pop Growth", "Total Number Increase", "Total Mortality", 
                        "Population Liveweight (kg)", "Offtake Liveweight (kg)", "Meat (kg)", "Manure", "Hides", "Milk", "Wool", 
                        "Cml Dry Matter", "Value of Offtake", "Value of Herd Increase", "Value of Herd Increase plus Offtake", 
                        "Value of Manure", "Value of Hides", "Value of Milk", "Total Production Value", 
                        "Feed Cost", "Labour Cost", "Health Cost", "Capital Cost", "Infrastructure Cost", "Total Expenditure", "Gross Margin", 
                        "Neonatal Female", "Neonatal Male", "Juvenile Female", "Juvenile Male", "Adult Female", "Adult Male", 
                        "Overall", "Neonatal Combined", "Juvenile Combined", "Adult Combined", "Female Combined", "Male Combined")
                 
                 for(i in 1:length(lab)) x[x == lab[[i]]] <- name[[i]];
                 
                 x
                 
               }
               
) #%>%

ou %>% head
##     Item           Group             Mean StDev              Min
## 1 Births Neonatal Female 521508.426595024  <NA> 521508.426595024
## 2 Births   Neonatal Male 521508.426595024  <NA> 521508.426595024
## 3 Births Juvenile Female                0  <NA>                0
## 4 Births   Juvenile Male                0  <NA>                0
## 5 Births    Adult Female                0  <NA>                0
## 6 Births      Adult Male                0  <NA>                0
##                 Q1           Median               Q3              Max
## 1 521508.426595024 521508.426595024 521508.426595024 521508.426595024
## 2 521508.426595024 521508.426595024 521508.426595024 521508.426595024
## 3                0                0                0                0
## 4                0                0                0                0
## 5                0                0                0                0
## 6                0                0                0                0
tail(ou)
##     Item             Group             Mean StDev              Min
## 451                Overall 24708806.5125079  <NA> 24708806.5125079
## 452      Neonatal Combined 4399853.88769091  <NA> 4399853.88769091
## 453      Juvenile Combined 3153248.77436824  <NA> 3153248.77436824
## 454         Adult Combined 17155703.8504488  <NA> 17155703.8504488
## 455        Female Combined 18246558.3486956  <NA> 18246558.3486956
## 456          Male Combined 6462248.16381227  <NA> 6462248.16381227
##                   Q1           Median               Q3              Max
## 451 24708806.5125079 24708806.5125079 24708806.5125079 24708806.5125079
## 452 4399853.88769091 4399853.88769091 4399853.88769091 4399853.88769091
## 453 3153248.77436824 3153248.77436824 3153248.77436824 3153248.77436824
## 454 17155703.8504488 17155703.8504488 17155703.8504488 17155703.8504488
## 455 18246558.3486956 18246558.3486956 18246558.3486956 18246558.3486956
## 456 6462248.16381227 6462248.16381227 6462248.16381227 6462248.16381227
ou %>% str
## 'data.frame':    456 obs. of  9 variables:
##  $ Item  : chr  "Births" "Births" "Births" "Births" ...
##  $ Group : chr  "Neonatal Female" "Neonatal Male" "Juvenile Female" "Juvenile Male" ...
##  $ Mean  : chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ StDev : chr  NA NA NA NA ...
##  $ Min   : chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ Q1    : chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ Median: chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ Q3    : chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ Max   : chr  "521508.426595024" "521508.426595024" "0" "0" ...

remove rows without item names

ou= ou %>% .[ .$Item != "", ] 

head(ou)
##     Item           Group             Mean StDev              Min
## 1 Births Neonatal Female 521508.426595024  <NA> 521508.426595024
## 2 Births   Neonatal Male 521508.426595024  <NA> 521508.426595024
## 3 Births Juvenile Female                0  <NA>                0
## 4 Births   Juvenile Male                0  <NA>                0
## 5 Births    Adult Female                0  <NA>                0
## 6 Births      Adult Male                0  <NA>                0
##                 Q1           Median               Q3              Max
## 1 521508.426595024 521508.426595024 521508.426595024 521508.426595024
## 2 521508.426595024 521508.426595024 521508.426595024 521508.426595024
## 3                0                0                0                0
## 4                0                0                0                0
## 5                0                0                0                0
## 6                0                0                0                0
ou %>% tail
##             Item             Group              Mean StDev               Min
## 439 Gross Margin           Overall  708177080.014107  <NA>  708177080.014107
## 440 Gross Margin Neonatal Combined  165452174.100016  <NA>  165452174.100016
## 441 Gross Margin Juvenile Combined  267394118.710613  <NA>  267394118.710613
## 442 Gross Margin    Adult Combined  275330787.203478  <NA>  275330787.203478
## 443 Gross Margin   Female Combined -137659148.307075  <NA> -137659148.307075
## 444 Gross Margin     Male Combined  845836228.321182  <NA>  845836228.321182
##                    Q1            Median                Q3               Max
## 439  708177080.014107  708177080.014107  708177080.014107  708177080.014107
## 440  165452174.100016  165452174.100016  165452174.100016  165452174.100016
## 441  267394118.710613  267394118.710613  267394118.710613  267394118.710613
## 442  275330787.203478  275330787.203478  275330787.203478  275330787.203478
## 443 -137659148.307075 -137659148.307075 -137659148.307075 -137659148.307075
## 444  845836228.321182  845836228.321182  845836228.321182  845836228.321182
str(ou)
## 'data.frame':    444 obs. of  9 variables:
##  $ Item  : chr  "Births" "Births" "Births" "Births" ...
##  $ Group : chr  "Neonatal Female" "Neonatal Male" "Juvenile Female" "Juvenile Male" ...
##  $ Mean  : chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ StDev : chr  NA NA NA NA ...
##  $ Min   : chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ Q1    : chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ Median: chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ Q3    : chr  "521508.426595024" "521508.426595024" "0" "0" ...
##  $ Max   : chr  "521508.426595024" "521508.426595024" "0" "0" ...
#}

map b_scen to f_par function, followed by other arguments

applicable in https://github.com/stephen-wh-kwok/testing/blob/main/ahle_sr.R

# output =map(b_scen, f_par, c_scen[[1]], age, sex, cats, .g, .t, .p, .l, data, 
# file, sheet, par_names, ignore, nruns, Num_months, baseline_scen, control_scen, ill_month)
# 
# names(output) = baseline_scen

stop parallel computing

https://www.rdocumentation.org/packages/ParallelLogger/versions/3.1.0/topics/stopCluster https://www.rdocumentation.org/packages/foreach/versions/1.5.2/topics/registerDoSEQ

In this exercise cluster was made and parallel backend was registered. Although parallel computing was not used as nruns = 1, the cluster should be stopped and sequential backend should be registered.

# 
 stopCluster(cl)
 registerDoSEQ()

# 
# output
#}