From 6c950679a204a4d6000e29b936f79f329316d882 Mon Sep 17 00:00:00 2001 From: gmillot <gael.millot@pasteur.fr> Date: Wed, 19 Sep 2018 16:01:21 +0200 Subject: [PATCH] v3.0.0 file name change --- README.md | 10 +- cute_little_R_functions.R | 2153 ++++++++++++++++++++++++++++++++++ cute_little_R_functions.docx | Bin 0 -> 168299 bytes cute_little_functions.R | 2152 --------------------------------- cute_little_functions.docx | Bin 168264 -> 0 bytes examples_alone.txt | 2 +- 6 files changed, 2159 insertions(+), 2158 deletions(-) create mode 100644 cute_little_R_functions.R create mode 100644 cute_little_R_functions.docx delete mode 100644 cute_little_functions.R delete mode 100644 cute_little_functions.docx diff --git a/README.md b/README.md index d6acbd5..75c6139 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ #### DESCRIPTION -Cute Little Functions contains 16 functions for R/RStudio that facilitate basic procedures in 1) object analysis, 2) object modification, 3) graphic handling and 4) log file management. +Cute Little R Functions contains 16 functions for R/RStudio that facilitate basic procedures in 1) object analysis, 2) object modification, 3) graphic handling and 4) log file management. The function names are: fun_param_check() fun_object_info() @@ -24,19 +24,19 @@ fun_export_data() Download the desired Tagged version, never the current master. -Source the cute_little_functions.R into R/RStudio to have the functions available in the working environment. +Source the cute_little_R_functions.R into R/RStudio to have the functions available in the working environment. Description of the functions is at the beginning of the function body. To obtain it: - Either read the cute_little_functions.docx (or open the cute_little_functions.R file). + Either read the cute_little_functions.docx (or open the cute_little_R_functions.R file). Or in the R/RStudio console, type the name of the function without brackets. Example : fun_object_info. #### FILE DESCRIPTIONS -cute_little_functions.R file that has to be sourced -cute_little_functions.docx just for easier code reading +cute_little_R_functions.R file that has to be sourced +cute_little_R_functions.docx just for easier code reading examples_alone.txt compile all the examples of each of the 16 functions into a single file diff --git a/cute_little_R_functions.R b/cute_little_R_functions.R new file mode 100644 index 0000000..841d829 --- /dev/null +++ b/cute_little_R_functions.R @@ -0,0 +1,2153 @@ +################################################################ +## ## +## CUTE LITTLE R FUNCTIONS v3.0.0 ## +## ## +## Gael A. Millot ## +## ## +## Compatible with R v3.5.1 ## +## ## +################################################################ + + + +# BEWARE: do not forget to save the modifications in the .R file + + +################################ OUTLINE ################################ + + +################ Object analysis 1 +######## fun_param_check() #### Checking class, type, length, etc. of objects 1 +######## fun_object_info() #### Recovering object information 7 +######## fun_1D_comp() #### comparison of two 1D datasets (vectors, factors, 1D tables) 7 +######## fun_2D_comp() #### comparison of two 2D datasets (row & col names, dimensions, etc.) 11 +######## fun_list_comp() #### comparison of two lists 16 + +################ Object modification 18 +######## fun_dataframe_remodeling() #### remodeling a data frame to have column name as a qualitative column and vice-versa 18 +######## fun_refactorization() #### remove classes that are not anymore present in factors or factor columns in data frames 20 +######## fun_rounding() #### Rounding number if decimal present 22 +######## fun_90clock_matrix_rot() #### 90° clockwise matrix rotation 23 +######## fun_hexa_hsv_color_matrix() #### Conversion of a numeric matrix into hexadecimal color matrix 23 + +################ Graphics 26 +######## fun_window_width_resizing() #### window width depending on classes to plot 26 +######## fun_open_window() #### Open a GUI or pdf graphic window 27 +######## fun_graph_param_prior_plot() #### Graph param before plotting 30 +######## fun_feature_post_plot() #### Graph param after plotting 33 +######## fun_close_specif_window() #### Closing specific graphic windows 41 + +################ Exporting results (text & tables) 42 +######## fun_export_data() #### Print string or data object into output file 42 + + +################################ FUNCTIONS ################################ + + +################ Object analysis + + +######## fun_param_check() #### Checking class, type, length, etc. of objects + + +# Check OK: clear to go Apollo +fun_param_check <- function(data, data.name = NULL, class = NULL, typeof = NULL, mode = NULL, length = NULL, prop = NULL, double.as.integer.allowed = FALSE, options = NULL, all.options.in.data = FALSE, na.contain = FALSE, neg.values = TRUE, print = TRUE){ +# AIM: +# Check the class, type, mode and length of the data argument +# Mainly used to check the arguments of other functions +# Check also other kind of data parameters, is it a proportion? Is it type double even if it is an integer? +# If options = NULL, then at least class, type, mode or length must be non null +# If options is non null, then class, type and mode must be NULL, and length can be NULL or specified +# REQUIRED FUNCTIONS +# none +# ARGUMENTS +# data: object to test +# data.name: name of the object to test. If NULL, use the name of the object assigned to the data argument +# class: one of the class() result +# typeof: one of the typeof() result +# mode: one of the mode() result (for non vector object) +# length: length of the object +# prop: logical, are the numeric values between 0 and 1 (proportion)? +# double.as.integer.allowed: logical. If TRUE, no error is reported if argument is set to typeof = "integer" or class = "integer", while the reality is typeof = "double" or class = "numeric" but the numbers have a zero as modulo (remainder of a division). This means that i<-1 , which is typeof(i) -> "double" is considered as integer with double.as.integer.allowed = TRUE +# options: a vector of possible values for data +# all.options.in.data: If TRUE, all of the options must be present at least once in data, and nothing else. If FALSE, some of the options must be present in data, and nothing else +# na.contain: can data contains NA? +# neg.values: are negative numeric values authorized? BEWARE: only considered if set to FALSE, to check for non negative values when class is set to "numeric", "matrix", "array", "data.frame", "table", or typeof is set to "double", "integer", or mode is set to "numeric" +# print: print the error message if $problem is TRUE? +# RETURN +# a list containing: +# $problem: logical. Is there any problem detected ? +# $text: the problem detected +# $param.name: name of the checked parameter +# EXAMPLES +# test <- 1:3 ; fun_param_check(data = test, data.name = NULL, print = TRUE, options = NULL, all.options.in.data = FALSE, class = NULL, typeof = NULL, mode = NULL, prop = TRUE, double.as.integer.allowed = FALSE, length = NULL) +# test <- 1:3 ; fun_param_check(data = test, print = TRUE, class = "numeric", typeof = NULL, double.as.integer.allowed = FALSE) +# DEBUGGING +# data = 1:3 ; data.name = NULL ; print = TRUE; options = NULL ; all.options.in.data = FALSE ; class = "numeric" ; typeof = NULL ; mode = NULL ; prop = NULL ; double.as.integer.allowed = TRUE ; length = NULL # for function debugging +# argument checking +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) +if( ! is.null(data.name)){ +if( ! (length(data.name) == 1 & class(data.name) == "character")){ +tempo.cat <- paste0("\n\n================\n\nERROR: data.name ARGUMENT MUST BE A SINGLE CHARACTER ELEMENT AND NOT ", paste(data.name, collapse = " "), "\n\n================\n\n") +stop(tempo.cat) +} +} +if(is.null(options) & is.null(class) & is.null(typeof) & is.null(mode) & is.null(prop) & is.null(length)){ +tempo.cat <- paste0("\n\n================\n\nERROR: AT LEAST ONE OF THE options, class, typeof, mode, prop, OR length ARGUMENT MUST BE SPECIFIED\n\n================\n\n") +stop(tempo.cat) +} +if( ! is.null(options) & ( ! is.null(class) | ! is.null(typeof) | ! is.null(mode) | ! is.null(prop))){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE class, typeof, mode AND prop ARGUMENTS MUST BE NULL IF THE option ARGUMENT IS SPECIFIED\nTHE option ARGUMENT MUST BE NULL IF THE class AND/OR typeof AND/OR mode AND/OR prop ARGUMENT IS SPECIFIED\n\n================\n\n") +stop(tempo.cat) +} +if( ! (all(class(neg.values) == "logical") & length(neg.values) == 1 & any(is.na(neg.values)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE neg.values ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") +stop(tempo.cat) +} +if(neg.values == FALSE & is.null(class) & is.null(typeof) & is.null(mode)){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE neg.values ARGUMENT CANNOT BE SWITCHED TO FALSE IF class, typeof AND mode ARGUMENTS ARE NULL\n\n================\n\n") +stop(tempo.cat) +} +if( ! is.null(class)){ +if( ! all(class %in% c("logical", "integer", "numeric", "complex", "character", "matrix", "array", "data.frame", "list", "factor", "table", "expression", "name", "symbol", "function") & any(is.na(class)) != TRUE)){ # not length == 1 here because ordered factors are class "factor" "ordered" (length == 2) +tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"integer\", \"numeric\", \"complex\", \"character\", \"matrix\", \"array\", \"data.frame\", \"list\", \"factor\", \"table\", \"expression\", \"name\", \"symbol\", \"function\" \n\n================\n\n") +stop(tempo.cat) +} +if(neg.values == FALSE & ! any(class %in% c("numeric", "matrix", "array", "data.frame", "table"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT CANNOT BE OTHER THAN \"numeric\", \"matrix\", \"array\", \"data.frame\", \"table\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") +stop(tempo.cat) +} +} +if( ! is.null(typeof)){ +if( ! (all(typeof %in% c("logical", "integer", "double", "complex", "character", "list", "expression", "name", "symbol", "closure", "special", "builtin")) & length(typeof) == 1 & any(is.na(typeof)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"integer\", \"double\", \"complex\", \"character\", \"list\", \"expression\", \"name\", \"symbol\", \"closure\", \"special\", \"builtin\" \n\n================\n\n") +stop(tempo.cat) +} +if(neg.values == FALSE & ! typeof %in% c("double", "integer")){ +tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT CANNOT BE OTHER THAN \"double\" OR \"integer\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") +stop(tempo.cat) +} +} +if( ! is.null(mode)){ +if( ! (all(mode %in% c("logical", "numeric", "complex", "character", "list", "expression", "name", "symbol", "function")) & length(mode) == 1 & any(is.na(mode)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"numeric\", \"complex\", \"character\", \"list\", \"expression\", \"name\", \"symbol\", \"function\"\n\n================\n\n") +stop(tempo.cat) +} +if(neg.values == FALSE & mode != "numeric"){ +tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT CANNOT BE OTHER THAN \"numeric\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") +stop(tempo.cat) +} +} +if( ! is.null(length)){ +if( ! (is.numeric(length) & length(length) == 1 & ! grepl(length, pattern = "\\.") & any(is.na(length)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: length ARGUMENT MUST BE A SINGLE INTEGER VALUE\n\n================\n\n") +stop(tempo.cat) +} +} +if( ! is.null(prop)){ +if( ! (is.logical(prop) | length(prop) == 1 & any(is.na(prop)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: prop ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") +stop(tempo.cat) +}else if(prop == TRUE){ +if( ! is.null(class)){ +if( ! any(class %in% c("numeric", "matrix", "array", "data.frame", "table"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT CANNOT BE OTHER THAN \"numeric\", \"matrix\", \"array\", \"data.frame\", \"table\" IF prop ARGUMENT IS TRUE\n\n================\n\n") +stop(tempo.cat) +} +} +if( ! is.null(mode)){ +if(mode != "numeric"){ +tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT CANNOT BE OTHER THAN \"numeric\" IF prop ARGUMENT IS TRUE\n\n================\n\n") +stop(tempo.cat) +} +} +if( ! is.null(typeof)){ +if(typeof != "double"){ +tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT CANNOT BE OTHER THAN \"double\" IF prop ARGUMENT IS TRUE\n\n================\n\n") +stop(tempo.cat) +} +} +} +} +if( ! (all(class(double.as.integer.allowed) == "logical") & length(double.as.integer.allowed) == 1 & any(is.na(double.as.integer.allowed)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE double.as.integer.allowed ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") +stop(tempo.cat) +} +if( ! (is.logical(all.options.in.data) & length(all.options.in.data) == 1 & any(is.na(all.options.in.data)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: all.options.in.data ARGUMENT MUST BE A SINGLE LOGICAL VALUE (TRUE OR FALSE ONLY)\n\n================\n\n") +stop(tempo.cat) +} +if( ! (all(class(na.contain) == "logical") & length(na.contain) == 1 & any(is.na(na.contain)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE na.contain ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") +stop(tempo.cat) +} +if( ! (all(class(print) == "logical") & length(print) == 1 & any(is.na(print)) != TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE print ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") +stop(tempo.cat) +} +# end argument checking +if(is.null(data.name)){ +data.name <- deparse(substitute(data)) +} +problem <- FALSE +text <- paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER") +if( ! is.null(options)){ +text <- "" +if( ! all(data %in% options)){ +problem <- TRUE +text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", paste(unique(data[ ! (data %in% options)]), collapse = " ")) +} +if(all.options.in.data == TRUE){ +if( ! all(options %in% data)){ +problem <- TRUE +if(text == ""){ +text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", unique(data[ ! (data %in% options)])) +}else{ +text <- paste0(text, "\nPROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", unique(data[ ! (data %in% options)])) +} +} +} +if( ! is.null(length)){ +if(length(data) != length){ +problem <- TRUE +if(text == ""){ +text <- paste0("PROBLEM: THE LENGTH OF ", data.name, " MUST BE ", length, " AND NOT ", length(data)) +}else{ +text <- paste0(text, "\nPROBLEM: THE LENGTH OF ", data.name, " MUST BE ", length, " AND NOT ", length(data)) +} +} +} +if(text == ""){ +text <- paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER") +} +} +arg.names <- c("class", "typeof", "mode", "length") +if(is.null(options)){ +for(i2 in 1:length(arg.names)){ +if( ! is.null(get(arg.names[i2]))){ +# script to execute +tempo.script <- ' +problem <- TRUE ; +if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ +text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE ") ; +}else{ +text <- paste0(text, " AND "); +} +text <- paste0(text, toupper(arg.names[i2]), " ", get(arg.names[i2])) +' +if(typeof(data) == "double" & double.as.integer.allowed == TRUE & ((arg.names[i2] == "class" & get(arg.names[i2]) == "integer") | (arg.names[i2] == "typeof" & get(arg.names[i2]) == "integer"))){ +if(! all(data%%1 == 0)){ # to check integers (use %%, meaning the remaining of a division): see the precedent line +eval(parse(text = tempo.script)) # execute tempo.script +} +}else if(eval(parse(text = paste0(arg.names[i2], "(data)"))) != get(arg.names[i2])){ +eval(parse(text = tempo.script)) # execute tempo.script +} +} +} +} +if( ! is.null(prop)){ +if(prop == TRUE){ +if(any(data < 0 | data > 1, na.rm = TRUE)){ +problem <- TRUE +if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ +text <- paste0("PROBLEM: ") +}else{ +text <- paste0(text, " AND ") +} +text <- paste0(text, "THE ", data.name, " PARAMETER MUST BE DECIMAL VALUES BETWEEN 0 AND 1") +} +} +} +if(na.contain == FALSE & any(is.na(data)) == TRUE){ +problem <- TRUE +if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ +text <- paste0("PROBLEM: ") +}else{ +text <- paste0(text, " AND ") +} +text <- paste0(text, "THE ", data.name, " PARAMETER CONTAINS NA WHILE NOT AUTHORIZED (na.contain ARGUMENT SET TO FALSE)") +} +if(neg.values == FALSE){ +if(any(data < 0, na.rm = TRUE)){ +problem <- TRUE +if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ +text <- paste0("PROBLEM: ") +}else{ +text <- paste0(text, " AND ") +} +text <- paste0(text, "THE ", data.name, " PARAMETER MUST NON NEGATIVE NUMERIC VALUES") +} +} +if(print == TRUE & problem == TRUE){ +cat(paste0("\n\n================\n\n", text, "\n\n================\n\n")) +} +output <- list(problem = problem, text = text, param.name = data.name) +return(output) +} + + +######## fun_object_info() #### Recovering object information + + +# Check OK: clear to go Apollo +fun_object_info <- function(data){ +# AIM: +# provide a full description of the object +# REQUIRED FUNCTIONS +# none +# ARGUMENTS +# data: object to test +# RETURN +# a list containing the info +# EXAMPLES +# fun_object_info(data = 1:3) +# DEBUGGING +# data = NULL # for function debugging +# data = 1:3 # for function debugging +# data = matrix(1:3) # for function debugging +# data = data.frame(a = 1:3) # for function debugging +# data = factor(1:3) # for function debugging +# data = list(1:3) # for function debugging +# argument checking +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +# end argument checking +data.name <- deparse(substitute(data)) +output <- list("FILE_NAME" = data.name) +tempo <- list("FILE_HEAD" = head(data)) +output <- c(output, tempo) +if( ! is.null(data)){ +tempo <- list("FILE_TAIL" = tail(data)) +output <- c(output, tempo) +if( ! is.null(dim(data))){ +tempo <- list("FILE_DIMENSION" = dim(data)) +names(tempo[[1]]) <- c("NROW", "NCOL") +output <- c(output, tempo) +} +tempo <- list("SUMMARY" = summary(data)) +output <- c(output, tempo) +} +if(class(data) == "data.frame" | class(data) == "matrix"){ +tempo <- list("COLUM_NAMES" = names(data)) +output <- c(output, tempo) +} +if(class(data) == "data.frame"){ +tempo <- list("STRUCTURE" = ls.str(data)) +output <- c(output, tempo) +tempo <- list("COLUMN_TYPE" = sapply(data, FUN = "typeof")) +output <- c(output, tempo) +} +if(class(data) == "list"){ +tempo <- list("COMPARTMENT_NAMES" = names(data)) +output <- c(output, tempo) +} +return(output) +} + + +######## fun_1D_comp() #### comparison of two 1D datasets (vectors, factors, 1D tables) + + +# Check OK: clear to go Apollo +fun_1D_comp <- function(data1, data2){ +# AIM: +# compare two 1D datasets (vector of factor or 1D table) of the same class or not. Check and report in a list if the 2 datasets have: +# same class +# common elements +# common element names (except factors) +# common levels (factors only) +# REQUIRED FUNCTIONS +# none +# ARGUMENTS +# data1: vector or factor or 1D table +# data2: vector or factor or 1D table +# RETURN +# a list containing: +# $same.class: logical. Are class identical? +# $class: class of the 2 datasets (NULL otherwise) +# $same.length: logical. Are number of elements identical? +# $length: number of elements in the 2 datasets (NULL otherwise) +# $same.levels: logical. Are levels identical? (NULL if data1 and data2 are not factors) +# $levels: levels of the 2 datasets if identical (NULL otherwise or NULL if data1 and data2 are not factors) +# $any.id.levels: logical. Is there any identical levels? (NULL if data1 and data2 are not factors) +# $same.levels.pos1: position, in data1, of the levels identical in data2 (NULL if data1 and data2 are not factors) +# $same.levels.pos2: position, in data2, of the levels identical in data1 (NULL if data1 and data2 are not factors) +# $common.levels: common levels between data1 and data2 (can be a subset of $levels or not). NULL if no common levels or if data1 and data2 are not factors +# $same.name: logical. Are element names identical ? +# $name: name of elements of the 2 datasets if identical (NULL otherwise) +# $any.id.name: logical. Is there any element names identical ? +# $same.name.pos1: position, in data1, of the element names identical in data2 +# $same.name.pos2: position, in data2, of the elements names identical in data1 +# $common.names: common element names between data1 and data2 (can be a subset of $name or not). NULL if no common element names +# $any.id.element: logical. is there any identical elements ? +# $same.element.pos1: position, in data1, of the elements identical in data2 +# $same.element.pos2: position, in data2, of the elements identical in data1 +# $common.elements: common elements between data1 and data2. NULL if no common elements +# $identical.object: logical. Are objects identical (kind of object, element names and content)? +# $identical.content: logical. Are content objects identical (identical elements excluding kind of object and element names)? +# EXAMPLES +# obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:5] ; fun_1D_comp(obs1, obs2) +# obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; fun_1D_comp(obs1, obs2) +# obs1 = 1:5 ; obs2 = 3:6 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:4] ; fun_1D_comp(obs1, obs2) +# obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[1:5]) ; fun_1D_comp(obs1, obs2) +# obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[10:11]) ; fun_1D_comp(obs1, obs2) +# obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[4:7]) ; fun_1D_comp(obs1, obs2) +# obs1 = 1:5 ; obs2 = factor(LETTERS[1:5]) ; fun_1D_comp(obs1, obs2) +# obs1 = 1:5 ; obs2 = 1.1:6.1 ; fun_1D_comp(obs1, obs2) +# obs1 = as.table(1:5); obs2 = as.table(1:5) ; fun_1D_comp(obs1, obs2) +# obs1 = as.table(1:5); obs2 = 1:5 ; fun_1D_comp(obs1, obs2) +# DEBUGGING +# data1 = 1:5 ; data2 = 1:5 ; names(data1) <- LETTERS[1:5] ; names(data2) <- LETTERS[1:5] # for function debugging +# argument checking +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +if( ! any(class(data1) %in% c("logical", "integer", "numeric", "character", "factor", "table"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A NON NULL VECTOR, FACTOR OR 1D TABLE\n\n================\n\n") +stop(tempo.cat) +}else if(all(class(data1) %in% "table")){ +if(length(dim(data1)) > 1){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A 1D TABLE\n\n================\n\n") +stop(tempo.cat) +} +} +if( ! any(class(data2) %in% c("logical", "integer", "numeric", "character", "factor", "table"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A NON NULL VECTOR, FACTOR OR 1D TABLE\n\n================\n\n") +stop(tempo.cat) +}else if(all(class(data2) %in% "table")){ +if(length(dim(data2)) > 1){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A 1D TABLE\n\n================\n\n") +stop(tempo.cat) +} +} +# end argument checking +same.class <- NULL +class <- NULL +same.length <- NULL +length <- NULL +same.levels <- NULL +levels <- NULL +any.id.levels <- NULL +same.levels.pos1 <- NULL +same.levels.pos2 <- NULL +common.levels <- NULL +same.name <- NULL +name <- NULL +any.id.name <- NULL +same.name.pos1 <- NULL +same.name.pos2 <- NULL +common.names <- NULL +any.id.element <- NULL +same.element.pos1 <- NULL +same.element.pos2 <- NULL +common.elements <- NULL +identical.object <- NULL +identical.content <- NULL +if(identical(data1, data2)){ +same.class <- TRUE +class <- class(data1) +same.length <- TRUE +length <- length(data1) +if(any(class(data1) %in% "factor")){ +same.levels <- TRUE +levels <- levels(data1) +any.id.levels <- TRUE +same.levels.pos1 <- 1:length(levels(data1)) +same.levels.pos2 <- 1:length(levels(data2)) +common.levels <- levels(data1) +} +if( ! is.null(names(data1))){ +same.name <- TRUE +name <- names(data1) +any.id.name <- TRUE +same.name.pos1 <- 1:length(data1) +same.name.pos2 <- 1:length(data2) +common.names <- names(data1) +} +any.id.element <- TRUE +same.element.pos1 <- 1:length(data1) +same.element.pos2 <- 1:length(data2) +common.elements <- data1 +identical.object <- TRUE +identical.content <- TRUE +}else{ +identical.object <- FALSE +if( ! identical(class(data1), class(data2))){ +same.class <- FALSE +}else{ +same.class <- TRUE +class <- class(data1) +} +if( ! identical(length(data1), length(data2))){ +same.length<- FALSE +}else{ +same.length<- TRUE +length <- length(data1) +} +if(any(class(data1) %in% "factor") & any(class(data2) %in% "factor")){ +if( ! identical(levels(data1), levels(data2))){ +same.levels <- FALSE +}else{ +same.levels <- TRUE +levels <- levels(data1) +} +any.id.levels <- FALSE +if(any(levels(data1) %in% levels(data2))){ +any.id.levels <- TRUE +same.levels.pos1 <- which(levels(data1) %in% levels(data2)) +} +if(any(levels(data2) %in% levels(data1))){ +any.id.levels <- TRUE +same.levels.pos2 <- which(levels(data2) %in% levels(data1)) +} +if(any.id.levels == TRUE){ +common.levels <- unique(c(levels(data1)[same.levels.pos1], levels(data2)[same.levels.pos2])) +} +} +if(any(class(data1) %in% "factor")){ # to compare content +data1 <- as.character(data1) +} +if(any(class(data2) %in% "factor")){ # to compare content +data2 <- as.character(data2) +} +if( ! (is.null(names(data1)) & is.null(names(data2)))){ +if( ! identical(names(data1), names(data2))){ +same.name <- FALSE +}else{ +same.name <- TRUE +name <- names(data1) +} +any.id.name <- FALSE +if(any(names(data1) %in% names(data2))){ +any.id.name <- TRUE +same.name.pos1 <- which(names(data1) %in% names(data2)) +} +if(any(names(data2) %in% names(data1))){ +any.id.name <- TRUE +same.name.pos2 <- which(names(data2) %in% names(data1)) +} +if(any.id.name == TRUE){ +common.names <- unique(c(names(data1)[same.name.pos1], names(data2)[same.name.pos2])) +} +} +any.id.element <- FALSE +if(any(data1 %in% data2)){ +any.id.element <- TRUE +same.element.pos1 <- which(data1 %in% data2) +} +if(any(data2 %in% data1)){ +any.id.element <- TRUE +same.element.pos2 <- which(data2 %in% data1) +} +if(any.id.element == TRUE){ +common.elements <- unique(c(data1[same.element.pos1], data2[same.element.pos2])) +} +if(same.length == TRUE & ! all(is.null(same.element.pos1), is.null(same.element.pos2))){ +names(same.element.pos1) <- NULL +names(same.element.pos2) <- NULL +if(identical(same.element.pos1, same.element.pos2)){ +identical.content <- TRUE +}else{ +identical.content <- FALSE +} +}else{ +identical.content <- FALSE +} +} +output <- list(same.class = same.class, class = class, same.length = same.length, length = length, same.levels = same.levels, levels = levels, any.id.levels = any.id.levels, same.levels.pos1 = same.levels.pos1, same.levels.pos2 = same.levels.pos2, common.levels = common.levels, same.name = same.name, name = name, any.id.name = any.id.name, same.name.pos1 = same.name.pos1, same.name.pos2 = same.name.pos2, common.names = common.names, any.id.element = any.id.element, same.element.pos1 = same.element.pos1, same.element.pos2 = same.element.pos2, common.elements = common.elements, identical.object = identical.object, identical.content = identical.content) +return(output) +} + + +######## fun_2D_comp() #### comparison of two 2D datasets (row & col names, dimensions, etc.) + + +# Check OK: clear to go Apollo +fun_2D_comp <- function(data1, data2){ +# AIM: +# compare two 2D datasets of the same class or not. Check and report in a list if the 2 datasets have: +# same class +# common row names +# common column names +# same row number +# same column number +# potential identical rows between the 2 datasets +# potential identical columns between the 2 datasets +# REQUIRED FUNCTIONS +# none +# ARGUMENTS +# data1: matrix, data frame or table +# data2: matrix, data frame or table +# RETURN +# a list containing: +# $same.class: logical. Are class identical ? +# $class: classes of the 2 datasets (NULL otherwise) +# $same.dim: logical. Are dimension identical ? +# $dim: dimension of the 2 datasets (NULL otherwise) +# $same.row.nb: logical. Are number of rows identical ? +# $row.nb: nb of rows of the 2 datasets if identical (NULL otherwise) +# $same.col.nb: logical. Are number of columns identical ? +# $col.nb: nb of columns of the 2 datasets if identical (NULL otherwise) +# $same.row.name: logical. Are row names identical ? +# $row.name: name of rows of the 2 datasets if identical (NULL otherwise) +# $same.col.name: logical. Are column names identical ? +# $col.name: name of columns of the 2 datasets if identical (NULL otherwise) +# $any.id.row: logical. is there identical rows ? +# $same.row.pos1: position, in data1, of the rows identical in data2 +# $same.row.pos2: position, in data2, of the rows identical in data1 +# $any.id.col: logical. is there identical columns ? +# $same.col.pos1: position in data1 of the cols identical in data2 +# $same.col.pos2: position in data2 of the cols identical in data1 +# $identical.object: logical. Are objects identical (including row & column names)? +# $identical.content: logical. Are content objects identical (identical excluding row & column names)? +# EXAMPLES +# obs1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; obs2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5]))) ; fun_2D_comp(obs1, obs2) +# DEBUGGING +# data1 = matrix(1:10, ncol = 5) ; data2 = matrix(1:10, ncol = 5) # for function debugging +# data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging +# data1 = matrix(1:15, byrow = TRUE, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:10, byrow = TRUE, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging +# data1 = matrix(1:15, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging +# data1 = matrix(1:15, ncol = 5, dimnames = list(paste0("A", letters[1:3]), LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging +# data1 = matrix(1:15, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:12, ncol = 4, dimnames = list(letters[1:3], LETTERS[1:4])) # for function debugging +# data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = matrix(101:110, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging +# data1 = data.frame(a = 1:3, b= letters[1:3], row.names = LETTERS[1:3]) ; data2 = data.frame(A = 1:3, B= letters[1:3]) # for function debugging +# data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5]))) # for function debugging +# data1 = table(Exp1 = c("A", "A", "A", "B", "B", "B"), Exp2 = c("A1", "B1", "A1", "C1", "C1", "B1")) ; data2 = data.frame(A = 1:3, B= letters[1:3]) # for function debugging +# argument checking +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +if( ! any(class(data1) %in% c("matrix", "data.frame", "table"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A MATRIX, DATA FRAME OR TABLE\n\n================\n\n") +stop(tempo.cat) +} +if( ! any(class(data2) %in% c("matrix", "data.frame", "table"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A MATRIX, DATA FRAME OR TABLE\n\n================\n\n") +stop(tempo.cat) +} +# end argument checking +same.class <- NULL +class <- NULL +same.dim <- NULL +dim <- NULL +same.row.nb <- NULL +row.nb <- NULL +same.col.nb <- NULL +col.nb <- NULL +same.row.name <- NULL +row.name <- NULL +same.col.name <- NULL +col.name <- NULL +any.id.row <- NULL +same.row.pos1 <- NULL +same.row.pos2 <- NULL +any.id.col <- NULL +same.col.pos1 <- NULL +same.col.pos2 <- NULL +identical.object <- NULL +identical.content <- NULL +if(identical(data1, data2) & any(class(data1) %in% c("matrix", "data.frame", "table"))){ +same.class <- TRUE +class <- class(data1) +same.dim <- TRUE +dim <- dim(data1) +same.row.nb <- TRUE +row.nb <- nrow(data1) +same.col.nb <- TRUE +col.nb <- ncol(data1) +same.row.name <- TRUE +row.name <- dimnames(data1)[[1]] +same.col.name <- TRUE +col.name <- dimnames(data1)[[2]] +any.id.row <- TRUE +same.row.pos1 <- 1:row.nb +same.row.pos2 <- 1:row.nb +any.id.col <- TRUE +same.col.pos1 <- 1:col.nb +same.col.pos2 <- 1:col.nb +identical.object <- TRUE +identical.content <- TRUE +}else{ +identical.object <- FALSE +if(all(class(data1) == "table") & length(dim(data1)) == 1){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT IS A 1D TABLE. USE THE info_1D_dataset_fun FUNCTION\n\n================\n\n") +stop(tempo.cat) +} +if(all(class(data2) == "table") & length(dim(data2)) == 1){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT IS A 1D TABLE. USE THE info_1D_dataset_fun FUNCTION\n\n================\n\n") +stop(tempo.cat) +} +if( ! identical(class(data1), class(data2))){ +same.class <- FALSE +}else if( ! any(class(data1) %in% c("matrix", "data.frame", "table"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 AND data2 ARGUMENTS MUST BE EITHER MATRIX, DATA FRAME OR TABLE\n\n================\n\n") +stop(tempo.cat) +}else{ +same.class <- TRUE +class <- class(data1) +} +if( ! identical(dim(data1), dim(data2))){ +same.dim <- FALSE +}else{ +same.dim <- TRUE +dim <- dim(data1) +} +if( ! identical(nrow(data1), nrow(data2))){ +same.row.nb <- FALSE +}else{ +same.row.nb <- TRUE +row.nb <- nrow(data1) +} +if( ! identical(ncol(data1), ncol(data2))){ +same.col.nb <- FALSE +}else{ +same.col.nb <- TRUE +col.nb <- ncol(data1) +} +# row and col names +if(is.null(dimnames(data1)) & is.null(dimnames(data2))){ +same.row.name <- TRUE +same.col.name <- TRUE +# row and col names remain NULL +}else if((is.null(dimnames(data1)) & ! is.null(dimnames(data2))) | ( ! is.null(dimnames(data1)) & is.null(dimnames(data2)))){ +same.row.name <- FALSE +same.col.name <- FALSE +# row and col names remain NULL +}else{ +if( ! identical(dimnames(data1)[[1]], dimnames(data2)[[1]])){ +same.row.name <- FALSE +# row names remain NULL +}else{ +same.row.name <- TRUE +row.name <- dimnames(data1)[[1]] +} +if( ! identical(dimnames(data1)[[2]], dimnames(data2)[[2]])){ +same.col.name <- FALSE +# col names remain NULL +}else{ +same.col.name <- TRUE +col.name <- dimnames(data1)[[2]] +} +} +# identical row and col content +if(all(class(data1) == "table")){ +as.data.frame(matrix(data1, ncol = ncol(data1)), stringsAsFactors = FALSE) +}else if(all(class(data1) == "matrix")){ +data1 <- as.data.frame(data1, stringsAsFactors = FALSE) +}else if(all(class(data1) == "data.frame")){ +data1 <- data.frame(lapply(data1, as.character), stringsAsFactors=FALSE) +} +if(all(class(data2) == "table")){ +as.data.frame(matrix(data2, ncol = ncol(data2)), stringsAsFactors = FALSE) +}else if(all(class(data2) == "matrix")){ +data2 <- as.data.frame(data2, stringsAsFactors = FALSE) +}else if(all(class(data2) == "data.frame")){ +data2 <- data.frame(lapply(data2, as.character), stringsAsFactors=FALSE) +} +row.names(data1) <- paste0("A", 1:nrow(data1)) +row.names(data2) <- paste0("A", 1:nrow(data2)) +if(same.col.nb == TRUE){ # because if not the same col nb, the row cannot be identical +same.row.pos1 <- suppressWarnings(which(mapply(FUN = identical, c(as.data.frame(t(data1), stringsAsFactors = FALSE)), c(as.data.frame(t(data2), stringsAsFactors = FALSE))))) +same.row.pos2 <- suppressWarnings(which(mapply(FUN = identical, c(as.data.frame(t(data2), stringsAsFactors = FALSE)), c(as.data.frame(t(data1), stringsAsFactors = FALSE))))) +names(same.row.pos1) <- NULL +names(same.row.pos2) <- NULL +if(all(is.na(same.row.pos1))){ +same.row.pos1 <- NULL +}else{ +same.row.pos1 <- same.row.pos1[ ! is.na(same.row.pos1)] +any.id.row <- TRUE +} +if(all(is.na(same.row.pos2))){ +same.row.pos2 <- NULL +}else{ +same.row.pos2 <- same.row.pos2[ ! is.na(same.row.pos2)] +any.id.row <- TRUE +} +if(is.null(same.row.pos1) & is.null(same.row.pos2)){ +any.id.row <- FALSE +} +}else{ +any.id.row <- FALSE +# same.row.pos1 and 2 remain NULL +} +if(same.row.nb == TRUE){ # because if not the same row nb, the col cannot be identical +same.col.pos1 <- suppressWarnings(which(mapply(FUN = identical, c(data1), c(data2)))) +same.col.pos2 <- suppressWarnings(which(mapply(FUN = identical, c(data2), c(data1)))) +names(same.col.pos1) <- NULL +names(same.col.pos2) <- NULL +if(all(is.na(same.col.pos1))){ +same.col.pos1 <- NULL +}else{ +same.col.pos1 <- same.col.pos1[ ! is.na(same.col.pos1)] +any.id.col <- TRUE +} +if(all(is.na(same.col.pos2))){ +same.col.pos2 <- NULL +}else{ +same.col.pos2 <- same.col.pos2[ ! is.na(same.col.pos2)] +any.id.col <- TRUE +} +if(is.null(same.col.pos1) & is.null(same.col.pos2)){ +any.id.col <- FALSE +} +}else{ +any.id.col <- FALSE +# same.col.pos1 and 2 remain NULL +} +if(same.dim == TRUE & ! all(is.null(same.row.pos1), is.null(same.row.pos2), is.null(same.col.pos1), is.null(same.col.pos2))){ # same.dim == TRUE means that same.row.nb == TRUE and same.col.nb == TRUE, meaning that row.nb != NULL and col.nb != NULL. Thus, no need to include these checkings +if(identical(same.row.pos1, 1:row.nb) & identical(same.row.pos2, 1:row.nb) & identical(same.col.pos1, 1:col.nb) & identical(same.col.pos2, 1:col.nb)){ +identical.content <- TRUE +} +}else{ +identical.content <- FALSE +} +} +output <- list(same.class = same.class, class = class, same.dim = same.dim, dim = dim, same.row.nb = same.row.nb, row.nb = row.nb, same.col.nb = same.col.nb , col.nb = col.nb, same.row.name = same.row.name, row.name = row.name, same.col.name = same.col.name, col.name = col.name, any.id.row = any.id.row, same.row.pos1 = same.row.pos1, same.row.pos2 = same.row.pos2, any.id.col = any.id.col, same.col.pos1 = same.col.pos1, same.col.pos2 = same.col.pos2, identical.object = identical.object, identical.content = identical.content) +return(output) +} + + +######## fun_list_comp() #### comparison of two lists + + +# Check OK: clear to go Apollo +fun_list_comp <- function(data1, data2){ +# AIM: +# compare two lists. Check and report in a list if the 2 datasets have: +# same length +# common names +# common compartments +# REQUIRED FUNCTIONS +# none +# ARGUMENTS +# data1: list +# data2: list +# RETURN +# a list containing: +# $same.length: logical. Are number of elements identical? +# $length: number of elements in the 2 datasets (NULL otherwise) +# $same.name: logical. Are element names identical ? +# $name: name of elements of the 2 datasets if identical (NULL otherwise) +# $any.id.name: logical. Is there any element names identical ? +# $same.name.pos1: position, in data1, of the element names identical in data2 +# $same.name.pos2: position, in data2, of the compartment names identical in data1 +# $any.id.compartment: logical. is there any identical compartments ? +# $same.compartment.pos1: position, in data1, of the compartments identical in data2 +# $same.compartment.pos2: position, in data2, of the compartments identical in data1 +# $identical.object: logical. Are objects identical (kind of object, compartment names and content)? +# $identical.content: logical. Are content objects identical (identical compartments excluding compartment names)? +# EXAMPLES +# obs1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) +# obs1 = list(1:5, LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2]) ; fun_list_comp(obs1, obs2) +# obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) +# obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(LETTERS[5:9], matrix(1:6), 1:5) ; fun_list_comp(obs1, obs2) +# DEBUGGING +# data1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; data2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) # for function debugging +# data1 = list(a = 1:5, b = LETTERS[1:2]) ; data2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) # for function debugging +# argument checking +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +if( ! any(class(data1) %in% "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A LIST\n\n================\n\n") +stop(tempo.cat) +} +if( ! any(class(data2) %in% "list")){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A LIST\n\n================\n\n") +stop(tempo.cat) +} +# end argument checking +same.length <- NULL +length <- NULL +same.name <- NULL +name <- NULL +any.id.name <- NULL +same.name.pos1 <- NULL +same.name.pos2 <- NULL +any.id.compartment <- NULL +same.compartment.pos1 <- NULL +same.compartment.pos2 <- NULL +identical.object <- NULL +identical.content <- NULL +if(identical(data1, data2)){ +same.length <- TRUE +length <- length(data1) +if( ! is.null(names(data1))){ +same.name <- TRUE +name <- names(data1) +any.id.name <- TRUE +same.name.pos1 <- 1:length(data1) +same.name.pos2 <- 1:length(data2) +} +any.id.compartment <- TRUE +same.compartment.pos1 <- 1:length(data1) +same.compartment.pos2 <- 1:length(data2) +identical.object <- TRUE +identical.content <- TRUE +}else{ +identical.object <- FALSE +if( ! identical(length(data1), length(data2))){ +same.length<- FALSE +}else{ +same.length<- TRUE +length <- length(data1) +} +if( ! (is.null(names(data1)) & is.null(names(data2)))){ +if( ! identical(names(data1), names(data2))){ +same.name <- FALSE +}else{ +same.name <- TRUE +name <- names(data1) +} +any.id.name <- FALSE +if(any(names(data1) %in% names(data2))){ +any.id.name <- TRUE +same.name.pos1 <- which(names(data1) %in% names(data2)) +} +if(any(names(data2) %in% names(data1))){ +any.id.name <- TRUE +same.name.pos2 <- which(names(data2) %in% names(data1)) +} +} +names(data1) <- NULL +names(data2) <- NULL +any.id.compartment <- FALSE +if(any(data1 %in% data2)){ +any.id.compartment <- TRUE +same.compartment.pos1 <- which(data1 %in% data2) +} +if(any(data2 %in% data1)){ +any.id.compartment <- TRUE +same.compartment.pos2 <- which(data2 %in% data1) +} +if(same.length == TRUE & ! all(is.null(same.compartment.pos1), is.null(same.compartment.pos2))){ +if(identical(same.compartment.pos1, same.compartment.pos2)){ +identical.content <- TRUE +}else{ +identical.content <- FALSE +} +}else{ +identical.content <- FALSE +} +} +output <- list(same.length = same.length, length = length, same.name = same.name, name = name, any.id.name = any.id.name, same.name.pos1 = same.name.pos1, same.name.pos2 = same.name.pos2, any.id.compartment = any.id.compartment, same.compartment.pos1 = same.compartment.pos1, same.compartment.pos2 = same.compartment.pos2, identical.object = identical.object, identical.content = identical.content) +return(output) +} + + +################ Object modification + + +######## fun_dataframe_remodeling() #### remodeling a data frame to have column name as a qualitative column and vice-versa + + +# Check OK: clear to go Apollo +fun_dataframe_remodeling <- function(data, quanti.col.name = "quanti", quali.col.name = "quali"){ +# AIM: +# if the data frame is made of numeric columns, a new data frame is created, with the 1st column gathering all the numeric values, and the 2nd column being the name of the columns of the initial data frame + + + +# If the data frame is made of one numeric column and one character or factor column, a new data frame is created, with the new columns corresponding to the split numeric values (according to the character column). NA are added a the end of each column to have the same number of rows + + + +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS +# data: data frame to convert +# quanti.col.name: optional name for the quanti column of the new data frame +# quali.col.name: optional name for the quali column of the new data frame +# RETURN +# the modified data frame +# EXAMPLES +# obs <- data.frame(col1 = (1:4)*10, col2 = c("A", "B", "A", "A")) ; obs ; fun_dataframe_remodeling(obs) +# obs <- data.frame(col1 = (1:4)*10, col2 = 5:8) ; obs ; fun_dataframe_remodeling(obs, quanti.col.name = "quanti", quali.col.name = "quali") +# DEBUGGING +# data = data.frame(a = 1:3, b = 4:6) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging +# data = data.frame(a = 1:3, b = 4:6, c = 11:13) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging +# data = data.frame(a = 1:3, b = letters[1:3]) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging +# data = data.frame(a = 1:3, b = letters[1:3]) ; quanti.col.name = "TEST" ; quali.col.name = "quali" # for function debugging +# data = data.frame(b = letters[1:3], a = 1:3) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging +# data = data.frame(b = c("e", "e", "h"), a = 1:3) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = quanti.col.name, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = quali.col.name, class = "character", length = 1) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +if( ! any(class(data) %in% "data.frame")){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data ARGUMENT MUST BE A DATA FRAME\n\n================\n\n") +stop(tempo.cat) +} +# end argument checking +tempo.factor <- unlist(lapply(data, class)) +for(i in 1:length(tempo.factor)){ # convert factor columns as character +if(all(tempo.factor[i] == "factor")){ +data[, i] <- as.character(data[, i]) +} +} +tempo.factor <- unlist(lapply(data, mode)) +if(length(data) == 2){ +if( ! ((mode(data[, 1]) == "character" & mode(data[, 2]) == "numeric") | mode(data[, 2]) == "character" & mode(data[, 1]) == "numeric" | mode(data[, 2]) == "numeric" & mode(data[, 1]) == "numeric") ){ +tempo.cat <- paste0("\n\n================\n\nERROR: IF data ARGUMENT IS A DATA FRAME MADE OF 2 COLUMNS, EITHER A COLUMN MUST BE NUMERIC AND THE OTHER CHARACTER, OR THE TWO COLUMNS MUST BE NUMERIC\n\n================\n\n") +stop(tempo.cat) +} +if((mode(data[, 1]) == "character" | mode(data[, 2]) == "character") & (quanti.col.name != "quanti" | quali.col.name != "quali")){ +tempo.cat <- paste0("\n\n================\n\nERROR: IMPROPER quanti.col.name OR quali.col.name RESETTINGS. THESE ARGUMENTS ARE RESERVED FOR DATA FRAMES MADE OF n NUMERIC COLUMNS ONLY\n\n================\n\n") +stop(tempo.cat) +} +}else{ +if( ! all(tempo.factor %in% "numeric")){ +tempo.cat <- paste0("\n\n================\n\nERROR: IF data ARGUMENT IS A DATA FRAME MADE OF ONE COLUMN, OR MORE THAN 2 COLUMNS, THESE COLUMNS MUST BE NUMERIC\n\n================\n\n") +stop(tempo.cat) +} +} +if(( ! any(tempo.factor %in% "character")) & is.null(names(data))){ +tempo.cat <- paste0("\n\n================\n\nERROR: NUMERIC DATA FRAME in the data ARGUMENT MUST HAVE COLUMN NAMES\n\n================\n\n") +stop() +} +if(all(tempo.factor %in% "numeric")){ +quanti <- NULL +for(i in 1:length(data)){ +quanti <-c(quanti, data[, i]) +} +quali <- rep(names(data), each = nrow(data)) +output.data <- data.frame(quanti, quali) +names(output.data) <- c(quanti.col.name, quali.col.name) +}else{ +if(class(data[, 1]) == "character"){ +data <- cbind(data[2], data[1]) +} +nc.max <- max(table(data[, 2])) # effectif maximum des classes +nb.na <- nc.max - table(data[,2]) # nombre de NA à ajouter pour réaliser la data frame +tempo<-split(data[, 1], data[, 2]) +for(i in 1:length(tempo)){tempo[[i]] <- append(tempo[[i]], rep(NA, nb.na[i]))} # des NA doivent être ajoutés lorsque les effectifs sont différents entre les classes. C'est uniquement pour que chaque colonne ait le même nombre de lignes +output.data<-data.frame(tempo) +} +return(output.data) +} + + +######## fun_refactorization() #### remove classes that are not anymore present in factors or factor columns in data frames + + +# Check OK: clear to go Apollo +fun_refactorization <- function(data, also.ordered = TRUE){ +# AIM: +# refactorize a factor or the factor columns of a data frame, such as only the class present are in the levels (no empty levels). The class order in levels is kept +# useful to remove the empty classes after row removing for instance +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS +# data: factor (ordered or not) or data frame +# also.ordered: refactorize also ordered factors? This to deal with ordered factors that have class "ordered" "factor" +# RETURN +# a list containing: +# $data: the modified object +# $removed: the removed classes for a factor and a list of the removed classes for each factor class of the data frame +# EXAMPLES +# obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, FALSE) +# obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, TRUE) +# obs <- factor(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) +# obs <- ordered(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) +# obs <- factor(LETTERS[1:6], levels = rev(LETTERS[1:6]))[-c(1:2)] ; obs ; fun_refactorization(obs, FALSE) +# DEBUGGING +# data <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A") ; data <- data[-c(1:2),] ; also.ordered <- TRUE # for function debugging +# data <- factor(LETTERS[1:6])[-c(1:2)] ; also.ordered <- TRUE # for function debugging +# data <- ordered(LETTERS[1:6])[-c(1:2)] ; also.ordered <- TRUE # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = also.ordered, class = "logical", length = 1) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +if(also.ordered == FALSE){ +if( ! (all(class(data) == "data.frame") | all(class(data) == "factor"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A FACTOR (NON ORDERED BECAUSE THE also.ordered ARGUMENT IS SET TO FALSE) OR A DATA FRAME\n\n================\n\n") +stop(tempo.cat) +} +} +if(also.ordered == TRUE){ +if( ! (all(class(data) == "data.frame") | all(class(data) == "factor") | all(class(data) %in% c("ordered", "factor")))){ +tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A FACTOR OR A DATA FRAME\n\n================\n\n") +stop(tempo.cat) +} +} +# end argument checking +text <- NULL +if(all(class(data) == "factor")){ +tempo.keep.log <- levels(data) %in% unique(data) +text <- levels(data)[ ! tempo.keep.log] +data <- factor(data, levels = levels(data)[tempo.keep.log]) +}else if(all(class(data) %in% c("ordered", "factor"))){ +tempo.keep.log <- levels(data) %in% unique(data) +text <- levels(data)[ ! tempo.keep.log] +data <- ordered(data, levels = levels(data)[tempo.keep.log]) +}else if(all(class(data) == "data.frame")){ +text <- vector("list", length(data)) +names(text) <- names(data) +tempo.factor.col <- sapply(sapply(lapply(data, class), FUN = "%in%", "factor"), FUN = "all") # get the factor column (logical) +for(i in 1:length(tempo.factor.col)){ +if(tempo.factor.col[i] == TRUE){ +tempo.keep.log <- levels(data[[i]]) %in% unique(data[[i]]) +text[[i]] <- levels(data[[i]])[ ! tempo.keep.log] +data[[i]] <- factor(data[[i]], levels = levels(data[[i]])[tempo.keep.log]) +} +} +tempo.ordered.col <- sapply(sapply(lapply(data, class), FUN = "%in%", "ordered"), FUN = "any") # get the ordered factor column (logical) if they exist +if(also.ordered == TRUE){ +for(i in 1:length(tempo.ordered.col)){ +if(tempo.ordered.col[i] == TRUE){ +tempo.keep.log <- levels(data[[i]]) %in% unique(data[[i]]) +text[[i]] <- levels(data[[i]])[ ! tempo.keep.log] +data[[i]] <- ordered(data[[i]], levels = levels(data[[i]])[tempo.keep.log]) +} +} +} +text <- text[(tempo.factor.col | tempo.ordered.col) & ! (sapply(text, FUN = length) == 0)] # remove the compartments of text that are not modified factors columns of data frame +} +output <- list(data = data, removed = text) +return(output) +} + + +######## fun_rounding() #### Rounding number if decimal present + + +# Check OK: clear to go Apollo +fun_rounding <- function(data, dec.nb = 2, after.lead.zero = TRUE){ +# AIM: +# round a vector of values, if decimal, with the desired number of decimal digits after the decimal leading zeros +# BEWARE +# Work well with numbers as character strings, but not always with numerical numbers because of the floating point +# Numeric values are really truncated from a part of their decimal digits, whatever options(digits) settings +# ARGUMENTS +# data: a vector of numbers (numeric or character mode) +# dec.nb: number of required decimal digits +# after.lead.zero: logical. If FALSE, rounding is performed for all the decimal numbers, whatever the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.00). If TRUE, dec.nb are taken after the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.0013) +# REQUIRED FUNCTIONS +# fun_param_check() +# RETURN +# the modified vector +# EXAMPLES +# cat(fun_rounding(data = c(10, 100.001, 333.0001254, 12312.1235), dec.nb = 2, after.lead.zero = FALSE)) +# cat(fun_rounding(data = c("10", "100.001", "333.0001254", "12312.1235"), dec.nb = 2, after.lead.zero = FALSE)) +# DEBUGGING +# data = data = c(10, 100.001, 333.0001254, 12312.1235) ; dec.nb = 2 ; after.lead.zero = FALSE # # for function debugging +# data = data = c("10", "100.001", "333.0001254", "12312.1235") ; dec.nb = 2 ; after.lead.zero = TRUE # # for function debugging +# argument checking +if( ! (all(typeof(data) == "character") | all(typeof(data) == "double") | all(typeof(data) == "integer"))){ +tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A VECTOR OF NUMBERS (IN NUMERIC OR CHARACTER MODE)\n\n================\n\n") +stop(tempo.cat) +} +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = dec.nb, typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = after.lead.zero, class = "logical", length = 1) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +# end argument checking +tempo <- grepl(x = data, pattern = "\\.") # detection of decimal numbers +ini.mode <- mode(data) +data <- as.character(data) # to really truncate decimal digits +for(i in 1:length(data)){ # scan all the numbers of the vector +if(tempo[i] == TRUE){ # means decimal number +if(after.lead.zero == TRUE){ +zero.pos <- unlist(gregexpr(text=data[i], pattern = 0)) # recover all the position of the zeros in the number. -1 if no zeros (do not record the leading and trailing zeros) +}else{ +zero.pos <- -1 # -1 as if no zero +} +dot.pos <- unlist(gregexpr(text=data[i], pattern = "\\.")) # recover all the position of the zeros in the number +digit.pos <- unlist(gregexpr(text=data[i], pattern = "[[:digit:]]")) # recover all the position of the digits in the number +dec.pos <- digit.pos[digit.pos > dot.pos] +count <- 0 +while((dot.pos + count + 1) %in% zero.pos & (dot.pos + count + 1) <= max(dec.pos) & (count + dec.nb) < length(dec.pos)){ # count the number of leading zeros in the decimal part +count <- count + 1 +} +data[i] <- formatC(as.numeric(data[i]), digits = (count + dec.nb), format = "f") +} +} +if(ini.mode != "character"){ +data <- as.numeric(data) +} +return(data) +} + + +######## fun_90clock_matrix_rot() #### 90° clockwise matrix rotation + + +# Check OK: clear to go Apollo +fun_90clock_matrix_rot <- function(data){ +# AIM: +# 90° clockwise matrix rotation +# applied twice, the function provide the mirror matrix, according to vertical and horizontal symmetry +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS +# data: matrix (matrix class) +# RETURN +# the modified matrix +# EXAMPLES +# obs <- matrix(1:10, ncol = 1) ; obs ; fun_90clock_matrix_rot(obs) +# obs <- matrix(LETTERS[1:10], ncol = 5) ; obs ; fun_90clock_matrix_rot(obs) +# DEBUGGING +# data = matrix(1:10, ncol = 1) +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +if( ! any(class(data) %in% "matrix")){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE data ARGUMENT MUST BE A MATRIX\n\n================\n\n") +stop(tempo.cat) +} +# end argument checking +for (i in 1:ncol(data)){data[,i] <- rev(data[,i])} +data <- t(data) +return(data) +} + + +######## fun_hexa_hsv_color_matrix() #### Conversion of a numeric matrix into hexadecimal color matrix + + +# Check OK: clear to go Apollo +fun_hexa_hsv_color_matrix <- function(mat1, mat.hsv.h = TRUE, notch = 1, s = 1, v = 1, forced.color = NULL){ +# AIM: +# convert a matrix made of numbers into a hexadecimal matrix for rgb colorization +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS: +# mat1: matrix 1 of non negative numerical values that has to be colored (matrix class). NA allowed +# mat.hsv.h: logical. Is mat1 the h of hsv colors ? (if TRUE, mat1 must be between zero and 1) +# notch: single value between 0 and 1 to shift the successive colors on the hsv circle by + notch +# s: s argument of hsv(). Must be between 0 and 1 +# v: v argument of hsv(). Must be between 0 and 1 +# forced.color: Must be NULL or hexadecimal color code or name given by colors(). The first minimal values of mat1 will be these colors. All the color of mat1 can be forced using this argument +# RETURN +# a list containing: +# $mat1.name: name of mat1 +# $colored.mat: colors of mat1 in hexa +# $problem: logical. Is any colors of forced.color overlap the colors designed by the function. NULL if forced.color = NULL +# $text.problem: text when overlapping colors. NULL if forced.color = NULL or problem == FALSE +# EXAMPLES +# mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]) ; fun_hexa_hsv_color_matrix(mat1, mat.hsv.h = FALSE, notch = 1, s = 1, v = 1, forced.color = NULL) +# DEBUGGING +# mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]); mat.hsv.h = FALSE ; notch = 1 ; s = 1 ; v = 1 ; forced.color = c(hsv(1,1,1), hsv(0,0,0)) # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = mat1, mode = "numeric", class = "matrix", na.contain = TRUE, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = mat.hsv.h, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = notch, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) +tempo <- fun_param_check(data = s, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) +tempo <- fun_param_check(data = v, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +if(mat.hsv.h == TRUE & fun_param_check(data = mat1, mode = "numeric", prop = TRUE, print = FALSE)$problem == TRUE){ +tempo.cat <- paste0("\n\n================\n\nERROR: mat1 ARGUMENT MUST BE A MATRIX OF PROPORTIONS SINCE THE mat.hsv.h ARGUMENT IS SET TO TRUE\n\n================\n\n") +stop(tempo.cat) +} +if( ! is.null(forced.color)){ +tempo <- fun_param_check(data = forced.color, class = "character") +if(tempo$problem == TRUE){ +stop() +} +if( ! all(forced.color %in% colors() | grepl(pattern = "^#", forced.color))){ # check that all strings of forced.color start by # +tempo.cat <- paste0("\n\n================\n\nERROR: forced.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # AND/OR COLOR NAMES GIVEN BY colors()\n\n================\n\n") +stop(tempo.cat) +} +} +# end argument checking +problem <- NULL +text.problem <- NULL +mat1.name <- deparse(substitute(mat1)) +# change the scale of the plotted matrix +if(mat.hsv.h == TRUE){ +if(any(min(mat1, na.rm = TRUE) < 0 | max(mat1, na.rm = TRUE) > 1, na.rm = TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: mat1 MUST BE MADE OF VALUES BETWEEN 0 AND 1 BECAUSE mat.hsv.h ARGUMENT SET TO TRUE\n\n================\n\n") +stop(tempo.cat) +} +}else{ +if(any(mat1 - floor(mat1) > 0, na.rm = TRUE) | any(mat1 == 0, na.rm = TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: mat1 MUST BE MADE OF INTEGER VALUES WITHOUT 0 BECAUSE mat.hsv.h ARGUMENT SET TO FALSE\n\n================\n\n") +stop(tempo.cat) +}else{ +mat1 <- mat1 / max(mat1, na.rm = TRUE) +} +} +if(notch != 1){ +different.color <- unique(as.vector(mat1)) +different.color <- different.color[ ! is.na(different.color)] +tempo.different.color <- different.color + c(0, cumsum(rep(notch, length(different.color) - 1))) +tempo.different.color <- tempo.different.color - floor(tempo.different.color) +if(any(duplicated(tempo.different.color) == TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: DUPLICATED VALUES AFTER USING notch (", paste(tempo.different.color[duplicated(tempo.different.color)], collapse = " "), "). TRY ANOTHER notch VALUE\n\n================\n\n") +stop(tempo.cat) +}else if(length(different.color) != length(tempo.different.color)){ +tempo.cat <- paste0("\n\n================\n\nERROR: LENGTH OF different.color (", paste(different.color, collapse = " "), ") DIFFERENT FROM LENGTH OF tempo.different.color (", paste(tempo.different.color, collapse = " "), ")\n\n================\n\n") +stop(tempo.cat) +}else{ +for(i in 1:length(different.color)){ +mat1[mat1 == different.color[i]] <- tempo.different.color[i] +} +} +} +if( ! is.null(forced.color)){ +hexa.values.to.change <- hsv(unique(sort(mat1))[1:length(forced.color)], s, v) +} +mat1[ ! is.na(mat1)] <- hsv(mat1[ ! is.na(mat1)], s, v) +if( ! is.null(forced.color)){ +if(any(forced.color %in% mat1, na.rm = TRUE)){ +problem <- TRUE +text.problem <- paste0("THE FOLLOWING COLORS WHERE INTRODUCED USING forced.color BUT WHERE ALREADY PRESENT IN THE COLORED MATRIX :", paste(forced.color[forced.color %in% mat1], collapse = " ")) +}else{ +problem <- FALSE +} +for(i in 1:length(hexa.values.to.change)){ +if( ! any(mat1 == hexa.values.to.change[i], na.rm = TRUE)){ +tempo.cat <- paste0("\n\n================\n\nERROR: THE ", hexa.values.to.change[i], " VALUE FROM hexa.values.to.change IS NOT REPRESENTED IN mat1 : ", paste(unique(as.vector(mat1)), collapse = " "), "\n\n================\n\n") +stop(tempo.cat) +}else{ +mat1[which(mat1 == hexa.values.to.change[i])] <- forced.color[i] +} +} +} +output <- list(mat1.name = mat1.name, colored.mat = mat1, problem = problem, text.problem = text.problem) +return(output) +} + + +################ Graphics + + +# this order can be used: +# fun_window_width_resizing() +# fun_open_window() +# fun_graph_param_prior_plot() # not for ggplot2 +# plot() or any other plotting +# fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 +# fun_close_specif_window() + + +######## fun_window_width_resizing() #### window width depending on classes to plot + + +# Check OK: clear to go Apollo +fun_window_width_resizing <- function(class.nb, inches.per.class.nb = 1, ini.window.width = 7, inch.left.space, inch.right.space, boundarie.space = 0.5){ +# AIM: +# rescale the width of a window to open depending on the number of classes to plot +# can be used for height, considering that it is as if it was a width +# this order can be used: +# fun_window_width_resizing() +# fun_open_window() +# fun_graph_param_prior_plot() # not for ggplot2 +# plot() or any other plotting +# fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 +# fun_close_specif_window() +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS +# class.nb: number of class to plot +# inches.per.class.nb: number of inches per unit of class.nb. 2 means 2 inches for each boxplot for instance +# ini.window.width:initial window width in inches +# inch.left.space: left horizontal margin of the figure region (in inches) +# inch.right.space: right horizontal margin of the figure region (in inches) +# boundarie.space: space between the right and left limits of the plotting region and the plot (0.5 means half a class width) +# RETURN +# the new window width in inches +# EXAMPLES +# fun_window_width_resizing(class.nb = 10, inches.per.class.nb = 0.2, ini.window.width = 7, inch.left.space = 1, inch.right.space = 1, boundarie.space = 0.5) +# DEBUGGING +# class.nb = 10 ; inches.per.class.nb = 0.2 ; ini.window.width = 7 ; inch.left.space = 1 ; inch.right.space = 1 ; boundarie.space = 0.5 # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = class.nb, typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = inches.per.class.nb, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = ini.window.width, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = inch.left.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = inch.right.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = boundarie.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +# end argument checking +range.max <- class.nb + boundarie.space # the max range of the future plot +range.min <- boundarie.space # the min range of the future plot +window.width <- inch.left.space + inch.right.space + inches.per.class.nb * (range.max - range.min) +return(window.width) +} + + +######## fun_open_window() #### Open a GUI or pdf graphic window + + +# Check OK: clear to go Apollo +fun_open_window <- function(pdf.disp = TRUE, path.fun = "working.dir", pdf.name.file = "graph", width.fun = 7, height.fun = 7, paper = "special", no.pdf.overwrite = TRUE, return.output = FALSE){ +# AIM: +# open a pdf or screen (GUI) graphic window +# BEWARE: on Linux, use pdf.disp = TRUE, if (GUI) graphic window is not always available, meaning that X is not installed (clusters for instance). Use X11() in R to test if available +# this order can be used: +# fun_window_width_resizing() +# fun_open_window() +# fun_graph_param_prior_plot() # not for ggplot2 +# plot() or any other plotting +# fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 +# fun_close_specif_window() +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS: +# pdf.disp: use pdf or not +# path.fun: where the pdf is saved. Must not finish by a path separator. Write "working.dir" if working directory is required (default) +# pdf.name.file: name of the pdf file containing the graphs (the .pdf extension is added by the function) +# width.fun: width of the windows (in inches) +# height.fun: height of the windows (in inches) +# paper: paper argument of the pdf function (paper format). Only used for pdf(). Either "a4", "letter", "legal", "us", "executive", "a4r", "USr" or "special". If "special", means that width.fun and height.fun specify the paper size +# no.pdf.overwrite: existing pdf can be overwritten ? Only used if pdf.disp = TRUE +# return.output: return output ? If TRUE but function not assigned, the output list is displayed +# RETURN +# a list containing: +# $pdf.loc: path of the pdf created +# $ini.par: initial par() parameters (to reset in a new graph) +# $zone.ini: initial window spliting (to reset in a new graph) +# EXAMPLES +# fun_open_window(pdf.disp = FALSE, path.fun = "C:/Users/Gael/Desktop", pdf.name.file = "graph", width.fun = 7, height.fun = 7, paper = "special", no.pdf.overwrite = TRUE, return.output = TRUE) +# DEBUGGING +# pdf.disp = TRUE ; path.fun = "C:/Users/Gael/Desktop" ; pdf.name.file = "graphs" ; width.fun = 7 ; height.fun = 7 ; paper = "special" ; no.pdf.overwrite = TRUE ; return.output = TRUE # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = pdf.disp, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = path.fun, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = pdf.name.file, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = width.fun, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = height.fun, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = path.fun, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = paper, options = c("a4", "letter", "legal", "us", "executive", "a4r", "USr", "special", "A4", "LETTER", "LEGAL", "US"), length = 1) ; eval(ee) +tempo <- fun_param_check(data =no.pdf.overwrite, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = return.output, class = "logical", length = 1) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +# end argument checking +if(path.fun == "working.dir"){ +path.fun <- getwd() +}else{ +if(dir.exists(path.fun) == FALSE){ +tempo.cat <- paste0("\n\n================\n\nERROR: path.fun ARGUMENT DOES NOT CORRESPOND TO EXISTING DIRECTORY\n\n================\n\n") +stop(tempo.cat) +} +} +if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows +tempo <- NULL +windows() +ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) +invisible(dev.off()) # close the new window +}else if(Sys.info()["sysname"] == "Linux"){ +if( ! file.exists(paste0(getwd(), "/Rplots.pdf"))){ +tempo <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window or a pdf. So no need to use again X11(). tempo == NULL if no problem, meaning that the X11 window is opened. If tempo != NULL, a pdf is open here paste0(getwd(), "/Rplots.pdf") +ini.par <- par(no.readonly = TRUE) # recover the initial graphical parameters. Works even if X11 is not working as R opens a pdf +invisible(dev.off()) # can be used here to close the pdf windows if tempo != NULL and to close the X11 window if tempo == NULL +}else{ +tempo.cat <- paste0("\n\n================\n\nPROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN\n\n================\n\n") +stop(tempo.cat) +} +}else{ +tempo <- NULL +quartz() +ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) +invisible(dev.off()) # close the new window +} +zone.ini <- matrix(1, ncol=1) # to recover the initial parameters for next figure region when device region split into several figure regions +if(pdf.disp == TRUE){ +pdf.loc <- paste0(path.fun, "/", pdf.name.file, ".pdf") +if(file.exists(pdf.loc) == TRUE & no.pdf.overwrite == TRUE){ +tempo.cat <- paste0("\n\n================\n\nERROR: pdf.loc FILE ALREADY EXISTS AND CANNOT BE OVERWRITTEN DUE TO no.pdf.overwrite ARGUMENT SET TO TRUE\n\n================\n\n") +stop(tempo.cat) +}else{ +pdf(width = width.fun, height = height.fun, file=pdf.loc, paper = paper) +} +}else if(pdf.disp == FALSE){ +pdf.loc <- NULL +if(Sys.info()["sysname"] == "Windows"){ # .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows +windows(width = width.fun, height = height.fun, rescale="fixed") +}else if(Sys.info()["sysname"] == "Linux"){ +if( ! is.null(tempo)){ +stop("PROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN") +}else{ +X11(width = width.fun, height = height.fun) +} +}else{ +quartz(width = width.fun, height = height.fun) +} +} +if(return.output == TRUE){ +output <- list(pdf.loc = pdf.loc, ini.par = ini.par, zone.ini = zone.ini) +return(output) +} +} + + +######## fun_graph_param_prior_plot() #### Graph param before plotting + + +# Check OK: clear to go Apollo +fun_graph_param_prior_plot <- function(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, std.x.range = TRUE, std.y.range = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 3.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE){ +# AIM: +# very convenient to erase the axes for post plot axis redrawing using fun_feature_post_plot() +# reinitialize and set the graphic parameters before plotting +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS +# param.reinitial: reinitialize graphic parameters before applying the new ones, as defined by the other arguments? Either TRUE or FALSE +# xlog.scale: Log scale for the x-axis? Either TRUE or FALSE. If TRUE, erases the x-axis, except legend, for further drawing by fun_feature_post_plot()(xlog argument of par()) +# ylog.scale: Log scale for the y-axis? Either TRUE or FALSE. If TRUE, erases the y-axis, except legend, for further drawing by fun_feature_post_plot()(ylog argument of par()) +# remove.label: remove labels (axis legend) of the two axes? Either TRUE or FALSE (ann argument of par()) +# remove.x.axis: remove x-axis except legend? Either TRUE or FALSE (control the xaxt argument of par()). Automately set to TRUE if xlog.scale == TRUE +# remove.y.axis: remove y-axis except legend? Either TRUE or FALSE (control the yaxt argument of par()). Automately set to TRUE if ylog.scale == TRUE +# std.x.range: standard range on the x-axis? TRUE (no range extend) or FALSE (4% range extend). Controls xaxs argument of par() (TRUE is xaxs = "i", FALSE is xaxs = "r") +# std.y.range: standard range on the y-axis? TRUE (no range extend) or FALSE (4% range extend). Controls yaxs argument of par() (TRUE is yaxs = "i", FALSE is yaxs = "r") +# down.space: lower vertical margin (in inches, mai argument of par()) +# left.space: left horizontal margin (in inches, mai argument of par()) +# up.space: upper vertical margin between plot region and grapical window (in inches, mai argument of par()) +# right.space: right horizontal margin (in inches, mai argument of par()) +# orient: scale number orientation (las argument of par()). 0, always parallel to the axis; 1, always horizontal; 2, always perpendicular to the axis; 3, always vertical +# dist.legend: numeric value that moves axis legends away in inches (first number of mgp argument of par() but in inches thus / 0.2) +# tick.length: length of the ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc. 0 means no tick +# box.type: bty argument of par(). Either "o", "l", "7", "c", "u", "]", the resulting box resembles the corresponding upper case letter. A value of "n" suppresses the box +# amplif.label: increase or decrease the size of the text in legends +# amplif.axis: increase or decrease the size of the scale numbers in axis +# display.extend: extend display beyond plotting region? Either TRUE or FALSE (xpd argument of par() without NA) +# return.par: return graphic parameter modification? +# RETURN +# return graphic parameter modification +# EXAMPLES +# fun_graph_param_prior_plot(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 4.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE) +# DEBUGGING +# param.reinitial = FALSE ; xlog.scale = FALSE ; ylog.scale = FALSE ; remove.label = TRUE ; remove.x.axis = TRUE ; remove.y.axis = TRUE ; down.space = 1 ; left.space = 1 ; up.space = 1 ; right.space = 1 ; orient = 1 ; dist.legend = 4.5 ; tick.length = 0.5 ; box.type = "n" ; amplif.label = 1 ; amplif.axis = 1 ; display.extend = FALSE ; return.par = FALSE # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = param.reinitial, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = xlog.scale, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = ylog.scale, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = remove.label, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = remove.x.axis, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = remove.y.axis, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = std.x.range, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = std.y.range, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = down.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = left.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = up.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = right.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = orient, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) +tempo <- fun_param_check(data = box.type, options = c("o", "l", "7", "c", "u", "]", "n"), length = 1) ; eval(ee) +tempo <- fun_param_check(data = amplif.label, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = amplif.axis, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = display.extend, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = return.par, class = "logical", length = 1) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +# end argument checking +if(param.reinitial == TRUE){ +if( ! all(names(dev.cur()) == "null device")){ +active.wind.nb <- dev.cur() +}else{ +active.wind.nb <- 0 +} +if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows +windows() +}else if(Sys.info()["sysname"] == "Linux"){ +if( ! file.exists(paste0(getwd(), "/Rplots.pdf"))){ +tempo <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window or a pdf. So no need to use again X11(). tempo == NULL if no problem, meaning that the X11 window is opened. If tempo != NULL, a pdf is open here paste0(getwd(), "/Rplots.pdf") +}else{ +tempo.cat <- paste0("\n\n================\n\nPROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN\n\n================\n\n") +stop(tempo.cat) +} +}else{ # macOS +quartz() +} +ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) +invisible(dev.off()) # close the new window +if( ! all(names(dev.cur()) == "null device")){ +dev.set(active.wind.nb) # go back to the active windows if exists +par(ini.par) # apply the initial par to current window +} +} +if(remove.x.axis == TRUE){ +par(xaxt = "n") # suppress the y-axis label +}else{ +par(xaxt = "s") +} +if(remove.y.axis == TRUE){ +par(yaxt = "n") # suppress the y-axis label +}else{ +par(yaxt = "s") +} +if(std.x.range == TRUE){ +par(xaxs = "i") +}else{ +par(xaxs = "r") +} +if(std.y.range == TRUE){ +par(yaxs = "i") +}else{ +par(yaxs = "r") +} +par(mai = c(down.space, left.space, up.space, right.space), ann = ! remove.label, las = orient, mgp = c(dist.legend/0.2, 1, 0), xpd = display.extend, bty= box.type, cex.lab = amplif.label, cex.axis = amplif.axis) +par(tcl = -par()$mgp[2] * tick.length) # tcl gives the length of the ticks as proportion of line text, knowing that mgp is in text lines. So the main ticks are a 0.5 of the distance of the axis numbers by default. The sign provides the side of the tick (negative for outside of the plot region) +if(xlog.scale == TRUE){ +par(xaxt = "n", xlog = TRUE) # suppress the x-axis label +}else{ +par(xlog = FALSE) +} +if(ylog.scale == TRUE){ +par(yaxt = "n", ylog = TRUE) # suppress the y-axis label +}else{ +par(ylog = FALSE) +} +if(return.par == TRUE){ +tempo.par <- par() +return(tempo.par) +} +} + + +######## fun_feature_post_plot() #### Graph param after plotting + + +# Check OK: clear to go Apollo +fun_feature_post_plot <- function(x.side = 0, x.log.scale = FALSE, x.categ = NULL, x.categ.pos = NULL, x.lab = "", x.axis.magnific = 1.5, x.label.magnific = 1.5, x.dist.legend = 0.5, x.nb.inter.tick = 1, y.side = 0, y.log.scale = FALSE, y.categ = NULL, y.categ.pos = NULL, y.lab = "", y.axis.magnific = 1.5, y.label.magnific = 1.5, y.dist.legend = 0.5, y.nb.inter.tick = 1, text.angle = 90, tick.length = 0.5, sec.tick.length = 0.3, bg.color = NULL, grid.lwd = NULL, grid.col = "white", corner.text = "", magnific = 1.5, magnific.corner.text = 1, just.label.add = FALSE, par.reset = FALSE, custom.par = NULL){ +# AIM: +# redesign axis. If x.side = 0, y.side = 0, the function just adds text at topright of the graph and reset par() for next graphics and provides outputs (see below) +# provide also positions for legend or additional text on the graph +# use fun_graph_param_prior_plot() before this function for initial inactivation of the axis drawings +# REQUIRED FUNCTIONS +# fun_param_check() +# fun_open_window() to reinitialize graph parameters if par.reset = TRUE and custom.par = NULL +# ARGUMENTS +# x.side: axis at the bottom (1) or top (3) of the region figure. Write 0 for no change +# x.log.scale: Log scale for the x-axis? Either TRUE or FALSE +# x.categ: character vector representing the classes (levels()) to specify when the x-axis is qualititative(stripchart, boxplot) +# x.categ.pos: position of the classes names (numeric vector of identical length than x.categ). If left NULL, this will be 1:length(levels()) +# x.lab: label of the x-axis. If x.side == 0 and x.lab != "", then x.lab is printed +# x.axis.magnific: increase or decrease the value to increase or decrease the size of the x axis numbers. Also control the size of displayed categories +# x.label.magnific: increase or decrease the value to increase or decrease the size of the x axis legend +# x.dist.legend: increase the number to move x-axis legends away in inches (first number of mgp argument of par() but in inches) +# x.nb.inter.tick: number of secondary ticks between main ticks on x-axis (only if not log scale). 0 means no secondary ticks +# y.side: axis at the left (2) or right (4) of the region figure. Write 0 for no change +# y.log.scale: Log scale for the y-axis? Either TRUE or FALSE +# y.categ: classes (levels()) to specify when the y-axis is qualititative(stripchart, boxplot) +# y.categ.pos: position of the classes names (numeric vector of identical length than y.categ). If left NULL, this will be 1:length(levels()) +# y.lab: label of the y-axis. If y.side == 0 and y.lab != "", then y.lab is printed +# y.axis.magnific: increase or decrease the value to increase or decrease the size of the y axis numbers. Also control the size of displayed categories +# y.label.magnific: increase or decrease the value to increase or decrease the size of the y axis legend +# y.dist.legend: increase the number to move y-axis legends away in inches (first number of mgp argument of par() but in inches) +# y.nb.inter.tick: number of secondary ticks between main ticks on y-axis (only if not log scale). 0 means non secondary ticks +# text.angle: angle of the text when axis is qualitative +# tick.length: length of the main ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc., 0 for no ticks) +# sec.tick.length: length of the secondary ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc., 0 for no ticks) +# bg.color: background color of the plot region. NULL for no color. BEWARE: cover/hide an existing plot ! +# grid.lwd: if non NULL, activate the grid line (specify the line width) +# grid.col: grid line color (only if grid.lwd non NULL) +# corner.text: text to add at the top right corner of the window +# magnific.corner.text: increase or decrease the size of the text +# par.reset: to reset all the graphics parameters. BEWARE: TRUE can generate display problems, mainly in graphic devices with multiple figure regions +# just.label.add: just add axis labels (legend)? Either TRUE or FALSE. If TRUE, at least (x.side == 0 & x.lab != "") or (y.side == 0 & y.lab != "") must be set to display the corresponding x.lab or y.lab +# custom.par: list that provides the parameters that reset all the graphics parameters. BEWARE: if NULL and par.reset == TRUE, the default par() parameters are used +# RETURN +# a list containing: +# $x.mid.left.fig.region: middle of the left margin of the figure region, in coordinates of the x-axis +# $x.left.fig.region: left side of the left margin, in coordinates of the x-axis +# $x.mid.right.fig.region: middle of the right margin of the figure region, in coordinates of the x-axis +# $x.right.fig.region: right side of the right margin, in coordinates of the x-axis +# $x.left.plot.region: left side of the plot region, in coordinates of the x-axis +# $x.right.plot.region: right side of the plot region, in coordinates of the x-axis +# $x.mid.plot.region: middle of the plot region, in coordinates of the x-axis +# $y.mid.bottom.fig.region: middle of the bottom margin of the figure region, in coordinates of the y-axis +# $y.bottom.fig.region: bottom of the bottom margin of the figure region, in coordinates of the y-axis +# $y.mid.top.fig.region: middle of the top margin of the figure region, in coordinates of the y-axis +# $y.top.fig.region: top of the top margin of the figure region, in coordinates of the y-axis +# $y.top.plot.region: top of the plot region, in coordinates of the y-axis +# $y.bottom.plot.region: bottom of the plot region, in coordinates of the y-axis +# $y.mid.plot.region: middle of the plot region, in coordinates of the y-axis +# $text: warning text +# EXAMPLES +# Example of log axis with log y-axis and unmodified x-axis: +# prior.par <- fun_graph_param_prior_plot(param.reinitial = TRUE, xlog.scale = FALSE, ylog.scale = TRUE, remove.label = TRUE, remove.x.axis = FALSE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 0.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = TRUE) ; plot(1:100, log = "y") ; fun_feature_post_plot(y.side = 2, y.log.scale = prior.par$ylog, x.lab = "Values", y.lab = "TEST", y.axis.magnific = 1.25, y.label.magnific = 1.5, y.dist.legend = 0.7, just.label.add = ! prior.par$ann) +# Example of log axis with redrawn x-axis and y-axis: +# prior.par <- fun_graph_param_prior_plot(param.reinitial = TRUE) ; plot(1:100) ; fun_feature_post_plot(x.side = 1, x.lab = "Values", y.side = 2, y.lab = "TEST", y.axis.magnific = 1, y.label.magnific = 2, y.dist.legend = 0.6) +# DEBUGGING +# x.side = 0 ; x.log.scale = FALSE ; x.categ = NULL ; x.categ.pos = NULL ; x.lab = "" ; x.axis.magnific = 1.5 ; x.label.magnific = 1.5 ; x.dist.legend = 1 ; x.nb.inter.tick = 1 ; y.side = 0 ; y.log.scale = FALSE ; y.categ = NULL ; y.categ.pos = NULL ; y.lab = "" ; y.axis.magnific = 1.5 ; y.label.magnific = 1.5 ; y.dist.legend = 0.7 ; y.nb.inter.tick = 1 ; text.angle = 90 ; tick.length = 0.5 ; sec.tick.length = 0.3 ; bg.color = NULL ; grid.lwd = NULL ; grid.col = "white" ; corner.text = "" ; magnific.corner.text = 1 ; just.label.add = FALSE ; par.reset = FALSE ; custom.par = NULL # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +if(length(find("fun_open_window", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_open_window() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = x.side, options = c(0, 1, 3), length = 1) ; eval(ee) +tempo <- fun_param_check(data = x.log.scale, class = "logical", length = 1) ; eval(ee) +if( ! is.null(x.categ)){ +tempo <- fun_param_check(data = x.categ, class = "character", na.contain = TRUE) ; eval(ee) +} +if( ! is.null(x.categ.pos)){ +tempo <- fun_param_check(data = x.categ.pos, class = "numeric") ; eval(ee) +} +tempo <- fun_param_check(data = x.lab, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = x.axis.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = x.label.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = x.dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = x.nb.inter.tick, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) +tempo <- fun_param_check(data = y.side, options = c(0, 2, 4), length = 1) ; eval(ee) +tempo <- fun_param_check(data = y.log.scale, class = "logical", length = 1) ; eval(ee) +if( ! is.null(y.categ)){ +tempo <- fun_param_check(data = y.categ, class = "character", na.contain = TRUE) ; eval(ee) +} +if( ! is.null(y.categ.pos)){ +tempo <- fun_param_check(data = y.categ.pos, class = "numeric") ; eval(ee) +} +tempo <- fun_param_check(data = y.lab, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = y.axis.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = y.label.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = y.dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = y.nb.inter.tick, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) +tempo <- fun_param_check(data = text.angle, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) +tempo <- fun_param_check(data = sec.tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) +if( ! is.null(bg.color)){ +tempo <- fun_param_check(data = bg.color, class = "character", length = 1) ; eval(ee) +if( ! (bg.color %in% colors() | grepl(pattern = "^#", bg.color))){ # check color +tempo.cat <- paste0("\n\n================\n\nERROR: bg.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # OR A COLOR NAME GIVEN BY colors()\n\n================\n\n") +stop(tempo.cat) +} +} +if( ! is.null(grid.lwd)){ +tempo <- fun_param_check(data = grid.lwd, class = "numeric", neg.values = FALSE) ; eval(ee) +} +if( ! is.null(grid.col)){ +tempo <- fun_param_check(data = grid.col, class = "character", length = 1) ; eval(ee) +if( ! (grid.col %in% colors() | grepl(pattern = "^#", grid.col))){ # check color +tempo.cat <- paste0("\n\n================\n\nERROR: grid.col ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # OR A COLOR NAME GIVEN BY colors()\n\n================\n\n") +stop(tempo.cat) +} +} +tempo <- fun_param_check(data = corner.text, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = magnific.corner.text, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) +tempo <- fun_param_check(data = just.label.add, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = par.reset, class = "logical", length = 1) ; eval(ee) +if( ! is.null(custom.par)){ +tempo <- fun_param_check(data = custom.par, typeof = "list", length = 1) ; eval(ee) +} +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +# end argument checking +text <- NULL +par(tcl = -par()$mgp[2] * tick.length) +if(x.log.scale == TRUE){ +grid.coord.x <- c(10^par("usr")[1], 10^par("usr")[2]) +}else{ +grid.coord.x <- c(par("usr")[1], par("usr")[2]) +} +if(y.log.scale == TRUE){ +grid.coord.y <- c(10^par("usr")[3], 10^par("usr")[4]) +}else{ +grid.coord.y <- c(par("usr")[3], par("usr")[4]) +} +if( ! is.null(bg.color)){ +rect(grid.coord.x[1], grid.coord.y[1], grid.coord.x[2], grid.coord.y[2], col = bg.color, border = NA) +} +if( ! is.null(grid.lwd)){ +grid(nx = NA, ny = NULL, col = grid.col, lty = 1, lwd = grid.lwd) +} +if(x.log.scale == TRUE){ +x.mid.left.fig.region <- 10^(par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1] / 2) # in x coordinates, to position axis labeling at the bottom of the graph (according to x scale) +x.left.fig.region <- 10^(par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1]) # in x coordinates +x.mid.right.fig.region <- 10^(par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2]) / 2) # in x coordinates, to position axis labeling at the top of the graph (according to x scale) +x.right.fig.region <- 10^(par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2])) # in x coordinates +x.left.plot.region <- 10^par("usr")[1] # in x coordinates, left of the plot region (according to x scale) +x.right.plot.region <- 10^par("usr")[2] # in x coordinates, right of the plot region (according to x scale) +x.mid.plot.region <- 10^((par("usr")[2] + par("usr")[1]) / 2) # in x coordinates, right of the plot region (according to x scale) +}else{ +x.mid.left.fig.region <- (par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1] / 2) # in x coordinates, to position axis labeling at the bottom of the graph (according to x scale) +x.left.fig.region <- (par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1]) # in x coordinates +x.mid.right.fig.region <- (par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2]) / 2) # in x coordinates, to position axis labeling at the top of the graph (according to x scale) +x.right.fig.region <- (par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2])) # in x coordinates +x.left.plot.region <- par("usr")[1] # in x coordinates, left of the plot region (according to x scale) +x.right.plot.region <- par("usr")[2] # in x coordinates, right of the plot region (according to x scale) +x.mid.plot.region <- (par("usr")[2] + par("usr")[1]) / 2 # in x coordinates, right of the plot region (according to x scale) +} +if(y.log.scale == TRUE){ +y.mid.bottom.fig.region <- 10^(par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3] / 2) # in y coordinates, to position axis labeling at the bottom of the graph (according to y scale). Ex mid.bottom.space +y.bottom.fig.region <- 10^(par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3]) # in y coordinates +y.mid.top.fig.region <- 10^(par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4]) / 2) # in y coordinates, to position axis labeling at the top of the graph (according to y scale). Ex mid.top.space +y.top.fig.region <- 10^(par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4])) # in y coordinates +y.top.plot.region <- 10^par("usr")[4] # in y coordinates, top of the plot region (according to y scale) +y.bottom.plot.region <- 10^par("usr")[3] # in y coordinates, bottom of the plot region (according to y scale) +y.mid.plot.region <- (par("usr")[3] + par("usr")[4]) / 2 # in x coordinates, right of the plot region (according to x scale) +}else{ +y.mid.bottom.fig.region <- (par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3] / 2) # in y coordinates, to position axis labeling at the bottom of the graph (according to y scale). Ex mid.bottom.space +y.bottom.fig.region <- (par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3]) # in y coordinates +y.mid.top.fig.region <- (par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4]) / 2) # in y coordinates, to position axis labeling at the top of the graph (according to y scale). Ex mid.top.space +y.top.fig.region <- (par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4])) # in y coordinates +y.top.plot.region <- par("usr")[4] # in y coordinates, top of the plot region (according to y scale) +y.bottom.plot.region <- par("usr")[3] # in y coordinates, bottom of the plot region (according to y scale) +y.mid.plot.region <- 10^((par("usr")[3] + par("usr")[4]) / 2) # in x coordinates, right of the plot region (according to x scale) +} +if(x.side == 1 | x.side == 3){ +par(xpd=FALSE, xaxt="s") +if(is.null(x.categ) & x.log.scale == TRUE){ +if(any(par()$xaxp[1:2] == 0)){ +if(par()$xaxp[1] == 0){ +par(xaxp = c(10^-30, par()$xaxp[2:3])) # because log10(par()$xaxp[1] == 0) == -Inf +} +if(par()$xaxp[2] == 0){ +par(xaxp = c(par()$xaxp[1], 10^-30, par()$xaxp[3])) # because log10(par()$xaxp[2] == 0) == -Inf +} +} +axis(side=x.side, at=c(10^par()$usr[1], 10^par()$usr[2]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line +mtext(side = x.side, text = x.lab, line = x.dist.legend / 0.2, las = 0, cex = x.label.magnific) +par(tcl = -par()$mgp[2] * sec.tick.length) # length of the secondary ticks are reduced +suppressWarnings(rug(10^outer(c((log10(par("xaxp")[1]) -1):log10(par("xaxp")[2])), log10(1:10), "+"), ticksize = NA, side = x.side)) # ticksize = NA to allow the use of par()$tcl value +par(tcl = -par()$mgp[2] * tick.length) # back to main ticks +axis(side = x.side, at = c(1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10), labels = expression(10^-15, 10^-14, 10^-13, 10^-12, 10^-11, 10^-10, 10^-9, 10^-8, 10^-7, 10^-6, 10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6, 10^7, 10^8, 10^9, 10^10), lwd = 0, lwd.ticks = 1, cex.axis = x.axis.magnific) +x.text <- 10^par("usr")[2] +}else if(is.null(x.categ) & x.log.scale == FALSE){ +axis(side=x.side, at=c(par()$usr[1], par()$usr[2]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line +axis(side=x.side, at=round(seq(par()$xaxp[1], par()$xaxp[2], length.out=par()$xaxp[3]+1), 2), cex.axis = x.axis.magnific) +mtext(side = x.side, text = x.lab, line = x.dist.legend / 0.2, las = 0, cex = x.label.magnific) +if(x.nb.inter.tick > 0){ +inter.tick.unit <- (par("xaxp")[2] - par("xaxp")[1]) / par("xaxp")[3] +par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced +suppressWarnings(rug(seq(par("xaxp")[1] - 10 * inter.tick.unit, par("xaxp")[2] + 10 * inter.tick.unit, by = inter.tick.unit / (1 + x.nb.inter.tick)), ticksize = NA, x.side)) # ticksize = NA to allow the use of par()$tcl value +par(tcl = -par()$mgp[2] * tick.length) # back to main ticks +} +x.text <- par("usr")[2] +}else if(( ! is.null(x.categ)) & x.log.scale == FALSE){ +if(is.null(x.categ.pos)){ +x.categ.pos <- 1:length(x.categ) +}else if(length(x.categ.pos) != length(x.categ)){ +stop("\n\nPROBLEM: x.categ.pos MUST BE THE SAME LENGTH AS x.categ\n\n") +} +par(xpd = TRUE) +if(x.side == 1){ +segments(x0 = x.left.plot.region, x1 = x.right.plot.region, y0 = y.bottom.plot.region, y1 = y.bottom.plot.region) # draw the line of the axis +text(x = x.categ.pos, y = y.mid.bottom.fig.region, labels = x.categ, srt = text.angle, cex = x.axis.magnific) +}else if(x.side == 3){ +segments(x0 = x.left.plot.region, x1 = x.right.plot.region, y0 = y.top.plot.region, y1 = y.top.plot.region) # draw the line of the axis +text(x = x.categ.pos, y = y.mid.top.fig.region, labels = x.categ, srt = text.angle, cex = x.axis.magnific) +}else{ +stop("\n\nARGUMENT x.side CAN ONLY BE 1 OR 3\n\n") +} +par(xpd = FALSE) +x.text <- par("usr")[2] +}else{ +stop("\n\nPROBLEM WITH THE x.side (", x.side ,") OR x.log.scale (", x.log.scale,") ARGUMENTS\n\n") +} +}else{ +x.text <- par("usr")[2] +} +if(y.side == 2 | y.side == 4){ +par(xpd=FALSE, yaxt="s") +if(is.null(y.categ) & y.log.scale == TRUE){ +if(any(par()$yaxp[1:2] == 0)){ +if(par()$yaxp[1] == 0){ +par(yaxp = c(10^-30, par()$yaxp[2:3])) # because log10(par()$yaxp[1] == 0) == -Inf +} +if(par()$yaxp[2] == 0){ +par(yaxp = c(par()$yaxp[1], 10^-30, par()$yaxp[3])) # because log10(par()$yaxp[2] == 0) == -Inf +} +} +axis(side=y.side, at=c(10^par()$usr[3], 10^par()$usr[4]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line +par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced +suppressWarnings(rug(10^outer(c((log10(par("yaxp")[1])-1):log10(par("yaxp")[2])), log10(1:10), "+"), ticksize = NA, side = y.side)) # ticksize = NA to allow the use of par()$tcl value +par(tcl = -par()$mgp[2] * tick.length) # back to main tick length +axis(side = y.side, at = c(1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10), labels = expression(10^-15, 10^-14, 10^-13, 10^-12, 10^-11, 10^-10, 10^-9, 10^-8, 10^-7, 10^-6, 10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6, 10^7, 10^8, 10^9, 10^10), lwd = 0, lwd.ticks = 1, cex.axis = y.axis.magnific) +y.text <- 10^(par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) +mtext(side = y.side, text = y.lab, line = y.dist.legend / 0.2, las = 0, cex = y.label.magnific) +}else if(is.null(y.categ) & y.log.scale == FALSE){ +axis(side=y.side, at=c(par()$usr[3], par()$usr[4]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line +axis(side=y.side, at=round(seq(par()$yaxp[1], par()$yaxp[2], length.out=par()$yaxp[3]+1), 2), cex.axis = y.axis.magnific) +mtext(side = y.side, text = y.lab, line = y.dist.legend / 0.2, las = 0, cex = y.label.magnific) +if(y.nb.inter.tick > 0){ +inter.tick.unit <- (par("yaxp")[2] - par("yaxp")[1]) / par("yaxp")[3] +par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced +suppressWarnings(rug(seq(par("yaxp")[1] - 10 * inter.tick.unit, par("yaxp")[2] + 10 * inter.tick.unit, by = inter.tick.unit / (1 + y.nb.inter.tick)), ticksize = NA, side=y.side)) # ticksize = NA to allow the use of par()$tcl value +par(tcl = -par()$mgp[2] * tick.length) # back to main tick length +} +y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) +}else if(( ! is.null(y.categ)) & y.log.scale == FALSE){ +if(is.null(y.categ.pos)){ +y.categ.pos <- 1:length(y.categ) +}else if(length(y.categ.pos) != length(y.categ)){ +stop("\n\nPROBLEM: y.categ.pos MUST BE THE SAME LENGTH AS y.categ\n\n") +} +axis(side = y.side, at = y.categ.pos, labels = rep("", length(y.categ)), lwd=0, lwd.ticks=1) # draw the line of the axis +par(xpd = TRUE) +if(y.side == 2){ +text(x = x.mid.left.fig.region, y = y.categ.pos, labels = y.categ, srt = text.angle, cex = y.axis.magnific) +}else if(y.side == 4){ +text(x = x.mid.right.fig.region, y = y.categ.pos, labels = y.categ, srt = text.angle, cex = y.axis.magnific) +}else{ +stop("\n\nARGUMENT y.side CAN ONLY BE 2 OR 4\n\n") +} +par(xpd = FALSE) +y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) +}else{ +stop("\n\nPROBLEM WITH THE y.side (", y.side ,") OR y.log.scale (", y.log.scale,") ARGUMENTS\n\n") +} +}else{ +y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) +} +par(xpd=NA) +text(x = x.mid.right.fig.region, y = y.text, corner.text, adj=c(1, 1.1), cex = magnific.corner.text) # text at the topright corner. Replace x.right.fig.region by x.text if text at the right edge of the plot region +if(just.label.add == TRUE & x.side == 0 & x.lab != ""){ +text(x = x.mid.plot.region, y = y.mid.bottom.fig.region, x.lab, adj=c(0.5, 0.5), cex = x.label.magnific) # x label +} +if(just.label.add == TRUE & y.side == 0 & y.lab != ""){ +text(x = y.mid.plot.region, y = x.mid.left.fig.region, y.lab, adj=c(0.5, 0.5), cex = y.label.magnific) # x label +} +par(xpd=FALSE) +if(par.reset == TRUE){ +tempo.par <- fun_open_window(pdf.disp = FALSE, return.output = TRUE) +invisible(dev.off()) # close the new window +if( ! is.null(custom.par)){ +if( ! names(custom.par) %in% names(tempo.par$ini.par)){ +tempo.cat <- paste0("\n\n================\n\nERROR: custom.par ARGUMENT SHOULD HAVE THE NAMES OF THE COMPARTMENT LIST COMING FROM THE par() LIST\n\n================\n\n") +stop(tempo.cat) +} +par(custom.par) +text <- c(text, "\nGRAPH PARAMETERS SET TO VALUES DEFINED BY custom.par ARGUMENT\n") +}else{ +par(tempo.par$ini.par) +text <- c(text, "\nGRAPH PARAMETERS RESET TO par() DEFAULT VALUES\n") +} +} +output <- list(x.mid.left.fig.region = x.mid.left.fig.region, x.left.fig.region = x.left.fig.region, x.mid.right.fig.region = x.mid.right.fig.region, x.right.fig.region = x.right.fig.region, x.left.plot.region = x.left.plot.region, x.right.plot.region = x.right.plot.region, x.mid.plot.region = x.mid.plot.region, y.mid.bottom.fig.region = y.mid.bottom.fig.region, y.bottom.fig.region = y.bottom.fig.region, y.mid.top.fig.region = y.mid.top.fig.region, y.top.fig.region = y.top.fig.region, y.top.plot.region = y.top.plot.region, y.bottom.plot.region = y.bottom.plot.region, y.mid.plot.region = y.mid.plot.region, text = text) +return(output) +} + + +######## fun_close_specif_window() #### Closing specific graphic windows + + +# Check OK: clear to go Apollo +fun_close_specif_window <- function(kind = "pdf", return.text = FALSE){ +# AIM: +# close only specific graphic windows (devices) +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS: +# kind: vector, among c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff"), indicating the kind of graphic windows (devices) to close. BEWARE: either "windows", "quartz", "x11" or "X11" means that all the X11 GUI graphics devices will be closed, whatever the OS used +# return.text: print text regarding the kind parameter and the devices that were finally closed? +# RETURN +# text regarding the kind parameter and the devices that were finally closed +# EXAMPLES +# windows() ; windows() ; pdf() ; dev.list() ; fun_close_specif_window(kind = c("pdf", "x11"), return.text = TRUE) ; dev.list() +# DEBUGGING +# kind = c("windows", "pdf") ; return.text = FALSE # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = kind, options = c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff")) ; eval(ee) +tempo <- fun_param_check(data = return.text, class = "logical", length = 1) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +# end argument checking +text <- paste0("THE REQUIRED KIND OF GRAPHIC DEVICES TO CLOSE ARE ", paste(kind, collapse = " ")) +if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows +if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ +tempo <- kind %in% c("windows", "quartz", "x11", "X11") +kind[tempo] <- "windows" # # term are replaced by what is displayed when using a <- dev.list() ; names(a) +} +}else if(Sys.info()["sysname"] == "Linux"){ +if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ +tempo.device <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window to try to recover the X11 system used +if( ! is.null(tempo.device)){ +text <- paste0(text, "\nCANNOT CLOSE GUI GRAPHIC DEVICES AS REQUIRED BECAUSE THIS LINUX SYSTEM DOES NOT HAVE IT") +}else{ +tempo <- kind %in% c("windows", "quartz", "x11", "X11") +kind[tempo] <- names(dev.list()[length(dev.list())]) # # term are replaced by what is displayed when using a <- dev.list() ; names(a) +invisible(dev.off()) # close the X11 opened by tempo +} +} +}else{ # for macOS +if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ +tempo <- kind %in% c("windows", "quartz", "x11", "X11") +kind[tempo] <- "quartz" # term are replaced by what is displayed when using a <- dev.list() ; names(a) +} +} +kind <- unique(kind) +if(length(dev.list()) != 0){ +for(i in length(names(dev.list())):1){ +if(names(dev.list())[i] %in% kind){ +text <- paste0(text, "\n", names(dev.list())[i], " DEVICE NUMBER ", dev.list()[i], " HAS BEEN CLOSED") +invisible(dev.off(dev.list()[i])) +} +} +} +if(return.text == TRUE){ +return(text) +} +} + + +################ Exporting results (text & tables) + + +######## fun_export_data() #### Print string or data object into output file + + +# Check OK: clear to go Apollo +fun_export_data <- function(data, output ="results.txt", path = "C:/Users/Gael/Desktop", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, sep = 2){ +# AIM: +# print a character string or a data object into an output file +# REQUIRED FUNCTIONS +# fun_param_check() +# ARGUMENTS +# data: object to print in the output file +# output: name of the output file +# path: location of the output file +# no.overwrite: (logical) if output file already exists, defines if the printing is appended (default TRUE) or if the output file content is erased before printing (FALSE) +# rownames.kept: (logical) defines whether row names have to be removed or not in small tables (less than length.rows rows) +# vector.cat (logical). If TRUE print a vector of length > 1 using cat() instead of capture.output(). Otherwise (default FALSE) the opposite +# sep: number of separating lines after printed data (must be integer) +# RETURN +# nothing +# EXAMPLES +# fun_export_data(data = 1:3, output = "results.txt", path = "C:/Users/Gael/Desktop", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, sep = 2) +# DEBUGGING +# data = 1:3 ; output = "results.txt" ; path = "C:/Users/Gael/Desktop" ; no.overwrite = TRUE ; rownames.kept = FALSE ; vector.cat = FALSE ; sep = 2 # for function debugging +# required function checking +if(length(find("fun_param_check", mode = "function")) == 0){ +tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") +stop(tempo.cat) +} +# end required function checking +# argument checking +arg.check <- NULL # for function debbuging +checked.arg.names <- NULL # for function debbuging +ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) +tempo <- fun_param_check(data = output, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = path, class = "character", length = 1) ; eval(ee) +tempo <- fun_param_check(data = no.overwrite, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = rownames.kept, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = vector.cat, class = "logical", length = 1) ; eval(ee) +tempo <- fun_param_check(data = sep, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) +if(any(arg.check) == TRUE){ +stop() +} +# source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() +# the 4 next lines are just to know how to detect a missing argument. Important here because if data is not provided, print the code of the data function +arg.user.list <- as.list(match.call(expand.dots=FALSE))[-1] # recover all the arguments provided by the function user (excluding the argument with defaults values not provided by the user. Thus, it is really the list indicated by the user) +default.arg.list <- formals(fun = sys.function(sys.parent())) # list of all the arguments of the function with their default values (not the values of the user !). It seems that ls() as first line of the function provide the names of the arguments (empty, called, etc., or not) +arg.without.default.value <- sapply(default.arg.list, is.symbol) & sapply(sapply(default.arg.list, as.character), identical, "") # logical to detect argument without default values (these are typeof "symbol" and class "name" and empty character +if( ! all(names(default.arg.list)[arg.without.default.value] %in% names(arg.user.list))){ # test that the arguments with no null values are provided by the user +tempo.cat <- paste0("\n\n================\n\nERROR: VALUE REQUIRED FOR THESE ARGUMENTS WITH NO DEFAULTS VALUES: ", paste(names(default.arg.list)[arg.without.default.value][ ! names(default.arg.list)[arg.without.default.value] %in% names(arg.user.list)], collapse = " "), "\n\n================\n\n") +stop(tempo.cat) +} +if(output == ""){ +tempo.cat <- paste0("\n\n================\n\nERROR: output ARGUMENT DOES NOT CORRESPOND TO A VALID CHARACTER STRING\n\n================\n\n") +stop(tempo.cat) +} +if(dir.exists(path) == FALSE){ +tempo.cat <- paste0("\n\n================\n\nERROR: path ARGUMENT DOES NOT CORRESPOND TO EXISTING DIRECTORY\n\n================\n\n") +stop(tempo.cat) +} +# end argument checking +if(all(class(data) %in% c("matrix", "data.frame", "table"))){ +if(rownames.kept == FALSE & all(class(data) == "data.frame") & nrow(data) != 0 & nrow(data) <= 4){ # for data frames with nrows <= 4 +rownames.output.tables <- "" +length.rows <- nrow(data) +for(i in 1:length.rows){ # replace the rownames of the first 4 rows by increasing number of spaces (beacause identical row names not allowed in data frames). This method cannot be extended to more rows as the printed data frame is shifted on the right because of "big empty rownames" +rownames.output.tables <- c(rownames.output.tables, paste0(rownames.output.tables[i]," ", collapse="")) +} +row.names(data) <- rownames.output.tables[1:length.rows] +}else if(rownames.kept == FALSE & all(class(data) %in% c("matrix", "table"))){ +rownames(data) <- rep("", nrow(data)) # identical row names allowed in matrices and tables +} +capture.output(data, file=paste0(path, "/", output), append = no.overwrite) +}else if(is.vector(data) & all(class(data) != "list") & (length(data) == 1 | vector.cat == TRUE)){ +cat(data, file= paste0(path, "/", output), append = no.overwrite) +}else{ # other (array, list, factor or vector with vector.cat = FALSE) +capture.output(data, file=paste0(path, "/", output), append = no.overwrite) +} +sep.final <- paste0(rep("\n", sep), collapse = "") +write(sep.final, file= paste0(path, "/", output), append = TRUE) # add a sep +} + + diff --git a/cute_little_R_functions.docx b/cute_little_R_functions.docx new file mode 100644 index 0000000000000000000000000000000000000000..e7d8ec3554141ca2d44dc77bb327a0c937853d29 GIT binary patch literal 168299 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≪Tn~P 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 YQ3e9&#=mG51z-#g09?fYdj`P&0UI#vTL1t6 literal 0 HcmV?d00001 diff --git a/cute_little_functions.R b/cute_little_functions.R deleted file mode 100644 index f73e439..0000000 --- a/cute_little_functions.R +++ /dev/null @@ -1,2152 +0,0 @@ -################################################################ -## ## -## CUTE LITTLE FUNCTIONS v3.0.0 ## -## ## -## Gael A. Millot ## -## ## -## Compatible with R v3.5.1 ## -## ## -################################################################ - - - - - -################################ OUTLINE ################################ - - -################ Object analysis 1 -######## fun_param_check() #### Checking class, type, length, etc. of objects 1 -######## fun_object_info() #### Recovering object information 7 -######## fun_1D_comp() #### comparison of two 1D datasets (vectors, factors, 1D tables) 7 -######## fun_2D_comp() #### comparison of two 2D datasets (row & col names, dimensions, etc.) 11 -######## fun_list_comp() #### comparison of two lists 16 - -################ Object modification 18 -######## fun_dataframe_remodeling() #### remodeling a data frame to have column name as a qualitative column and vice-versa 18 -######## fun_refactorization() #### remove classes that are not anymore present in factors or factor columns in data frames 20 -######## fun_rounding() #### Rounding number if decimal present 22 -######## fun_90clock_matrix_rot() #### 90° clockwise matrix rotation 23 -######## fun_hexa_hsv_color_matrix() #### Conversion of a numeric matrix into hexadecimal color matrix 23 - -################ Graphics 26 -######## fun_window_width_resizing() #### window width depending on classes to plot 26 -######## fun_open_window() #### Open a GUI or pdf graphic window 27 -######## fun_graph_param_prior_plot() #### Graph param before plotting 30 -######## fun_feature_post_plot() #### Graph param after plotting 33 -######## fun_close_specif_window() #### Closing specific graphic windows 41 - -################ Exporting results (text & tables) 42 -######## fun_export_data() #### Print string or data object into output file 42 - - -################################ FUNCTIONS ################################ - - -################ Object analysis - - -######## fun_param_check() #### Checking class, type, length, etc. of objects - - -# Check OK: clear to go Apollo -fun_param_check <- function(data, data.name = NULL, class = NULL, typeof = NULL, mode = NULL, length = NULL, prop = NULL, double.as.integer.allowed = FALSE, options = NULL, all.options.in.data = FALSE, na.contain = FALSE, neg.values = TRUE, print = TRUE){ - # AIM: - # Check the class, type, mode and length of the data argument - # Mainly used to check the arguments of other functions - # Check also other kind of data parameters, is it a proportion? Is it type double even if it is an integer? - # If options = NULL, then at least class, type, mode or length must be non null - # If options is non null, then class, type and mode must be NULL, and length can be NULL or specified - # REQUIRED FUNCTIONS - # none - # ARGUMENTS - # data: object to test - # data.name: name of the object to test. If NULL, use the name of the object assigned to the data argument - # class: one of the class() result - # typeof: one of the typeof() result - # mode: one of the mode() result (for non vector object) - # length: length of the object - # prop: logical, are the numeric values between 0 and 1 (proportion)? - # double.as.integer.allowed: logical. If TRUE, no error is reported if argument is set to typeof = "integer" or class = "integer", while the reality is typeof = "double" or class = "numeric" but the numbers have a zero as modulo (remainder of a division). This means that i<-1 , which is typeof(i) -> "double" is considered as integer with double.as.integer.allowed = TRUE - # options: a vector of possible values for data - # all.options.in.data: If TRUE, all of the options must be present at least once in data, and nothing else. If FALSE, some of the options must be present in data, and nothing else - # na.contain: can data contains NA? - # neg.values: are negative numeric values authorized? BEWARE: only considered if set to FALSE, to check for non negative values when class is set to "numeric", "matrix", "array", "data.frame", "table", or typeof is set to "double", "integer", or mode is set to "numeric" - # print: print the error message if $problem is TRUE? - # RETURN - # a list containing: - # $problem: logical. Is there any problem detected ? - # $text: the problem detected - # $param.name: name of the checked parameter - # EXAMPLES - # test <- 1:3 ; fun_param_check(data = test, data.name = NULL, print = TRUE, options = NULL, all.options.in.data = FALSE, class = NULL, typeof = NULL, mode = NULL, prop = TRUE, double.as.integer.allowed = FALSE, length = NULL) - # test <- 1:3 ; fun_param_check(data = test, print = TRUE, class = "numeric", typeof = NULL, double.as.integer.allowed = FALSE) - # DEBUGGING - # data = 1:3 ; data.name = NULL ; print = TRUE; options = NULL ; all.options.in.data = FALSE ; class = "numeric" ; typeof = NULL ; mode = NULL ; prop = NULL ; double.as.integer.allowed = TRUE ; length = NULL # for function debugging - # argument checking - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) - if( ! is.null(data.name)){ - if( ! (length(data.name) == 1 & class(data.name) == "character")){ - tempo.cat <- paste0("\n\n================\n\nERROR: data.name ARGUMENT MUST BE A SINGLE CHARACTER ELEMENT AND NOT ", paste(data.name, collapse = " "), "\n\n================\n\n") - stop(tempo.cat) - } - } - if(is.null(options) & is.null(class) & is.null(typeof) & is.null(mode) & is.null(prop) & is.null(length)){ - tempo.cat <- paste0("\n\n================\n\nERROR: AT LEAST ONE OF THE options, class, typeof, mode, prop, OR length ARGUMENT MUST BE SPECIFIED\n\n================\n\n") - stop(tempo.cat) - } - if( ! is.null(options) & ( ! is.null(class) | ! is.null(typeof) | ! is.null(mode) | ! is.null(prop))){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE class, typeof, mode AND prop ARGUMENTS MUST BE NULL IF THE option ARGUMENT IS SPECIFIED\nTHE option ARGUMENT MUST BE NULL IF THE class AND/OR typeof AND/OR mode AND/OR prop ARGUMENT IS SPECIFIED\n\n================\n\n") - stop(tempo.cat) - } - if( ! (all(class(neg.values) == "logical") & length(neg.values) == 1 & any(is.na(neg.values)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE neg.values ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") - stop(tempo.cat) - } - if(neg.values == FALSE & is.null(class) & is.null(typeof) & is.null(mode)){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE neg.values ARGUMENT CANNOT BE SWITCHED TO FALSE IF class, typeof AND mode ARGUMENTS ARE NULL\n\n================\n\n") - stop(tempo.cat) - } - if( ! is.null(class)){ - if( ! all(class %in% c("logical", "integer", "numeric", "complex", "character", "matrix", "array", "data.frame", "list", "factor", "table", "expression", "name", "symbol", "function") & any(is.na(class)) != TRUE)){ # not length == 1 here because ordered factors are class "factor" "ordered" (length == 2) - tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"integer\", \"numeric\", \"complex\", \"character\", \"matrix\", \"array\", \"data.frame\", \"list\", \"factor\", \"table\", \"expression\", \"name\", \"symbol\", \"function\" \n\n================\n\n") - stop(tempo.cat) - } - if(neg.values == FALSE & ! any(class %in% c("numeric", "matrix", "array", "data.frame", "table"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT CANNOT BE OTHER THAN \"numeric\", \"matrix\", \"array\", \"data.frame\", \"table\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") - stop(tempo.cat) - } - } - if( ! is.null(typeof)){ - if( ! (all(typeof %in% c("logical", "integer", "double", "complex", "character", "list", "expression", "name", "symbol", "closure", "special", "builtin")) & length(typeof) == 1 & any(is.na(typeof)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"integer\", \"double\", \"complex\", \"character\", \"list\", \"expression\", \"name\", \"symbol\", \"closure\", \"special\", \"builtin\" \n\n================\n\n") - stop(tempo.cat) - } - if(neg.values == FALSE & ! typeof %in% c("double", "integer")){ - tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT CANNOT BE OTHER THAN \"double\" OR \"integer\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") - stop(tempo.cat) - } - } - if( ! is.null(mode)){ - if( ! (all(mode %in% c("logical", "numeric", "complex", "character", "list", "expression", "name", "symbol", "function")) & length(mode) == 1 & any(is.na(mode)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT MUST BE ONE OF THESE VALUE:\n\"logical\", \"numeric\", \"complex\", \"character\", \"list\", \"expression\", \"name\", \"symbol\", \"function\"\n\n================\n\n") - stop(tempo.cat) - } - if(neg.values == FALSE & mode != "numeric"){ - tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT CANNOT BE OTHER THAN \"numeric\" IF neg.values ARGUMENT IS SWITCHED TO FALSE\n\n================\n\n") - stop(tempo.cat) - } - } - if( ! is.null(length)){ - if( ! (is.numeric(length) & length(length) == 1 & ! grepl(length, pattern = "\\.") & any(is.na(length)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: length ARGUMENT MUST BE A SINGLE INTEGER VALUE\n\n================\n\n") - stop(tempo.cat) - } - } - if( ! is.null(prop)){ - if( ! (is.logical(prop) | length(prop) == 1 & any(is.na(prop)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: prop ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") - stop(tempo.cat) - }else if(prop == TRUE){ - if( ! is.null(class)){ - if( ! any(class %in% c("numeric", "matrix", "array", "data.frame", "table"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: class ARGUMENT CANNOT BE OTHER THAN \"numeric\", \"matrix\", \"array\", \"data.frame\", \"table\" IF prop ARGUMENT IS TRUE\n\n================\n\n") - stop(tempo.cat) - } - } - if( ! is.null(mode)){ - if(mode != "numeric"){ - tempo.cat <- paste0("\n\n================\n\nERROR: mode ARGUMENT CANNOT BE OTHER THAN \"numeric\" IF prop ARGUMENT IS TRUE\n\n================\n\n") - stop(tempo.cat) - } - } - if( ! is.null(typeof)){ - if(typeof != "double"){ - tempo.cat <- paste0("\n\n================\n\nERROR: typeof ARGUMENT CANNOT BE OTHER THAN \"double\" IF prop ARGUMENT IS TRUE\n\n================\n\n") - stop(tempo.cat) - } - } - } - } - if( ! (all(class(double.as.integer.allowed) == "logical") & length(double.as.integer.allowed) == 1 & any(is.na(double.as.integer.allowed)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE double.as.integer.allowed ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") - stop(tempo.cat) - } - if( ! (is.logical(all.options.in.data) & length(all.options.in.data) == 1 & any(is.na(all.options.in.data)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: all.options.in.data ARGUMENT MUST BE A SINGLE LOGICAL VALUE (TRUE OR FALSE ONLY)\n\n================\n\n") - stop(tempo.cat) - } - if( ! (all(class(na.contain) == "logical") & length(na.contain) == 1 & any(is.na(na.contain)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE na.contain ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") - stop(tempo.cat) - } - if( ! (all(class(print) == "logical") & length(print) == 1 & any(is.na(print)) != TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE print ARGUMENT MUST BE TRUE OR FALSE ONLY\n\n================\n\n") - stop(tempo.cat) - } - # end argument checking - if(is.null(data.name)){ - data.name <- deparse(substitute(data)) - } - problem <- FALSE - text <- paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER") - if( ! is.null(options)){ - text <- "" - if( ! all(data %in% options)){ - problem <- TRUE - text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", paste(unique(data[ ! (data %in% options)]), collapse = " ")) - } - if(all.options.in.data == TRUE){ - if( ! all(options %in% data)){ - problem <- TRUE - if(text == ""){ - text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", unique(data[ ! (data %in% options)])) - }else{ - text <- paste0(text, "\nPROBLEM: THE ", data.name, " PARAMETER MUST BE SOME OF THESE OPTIONS: ", paste(options, collapse = " "), "\nTHE PROBLEMATIC ELEMENTS OF ", data.name, " ARE: ", unique(data[ ! (data %in% options)])) - } - } - } - if( ! is.null(length)){ - if(length(data) != length){ - problem <- TRUE - if(text == ""){ - text <- paste0("PROBLEM: THE LENGTH OF ", data.name, " MUST BE ", length, " AND NOT ", length(data)) - }else{ - text <- paste0(text, "\nPROBLEM: THE LENGTH OF ", data.name, " MUST BE ", length, " AND NOT ", length(data)) - } - } - } - if(text == ""){ - text <- paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER") - } - } - arg.names <- c("class", "typeof", "mode", "length") - if(is.null(options)){ - for(i2 in 1:length(arg.names)){ - if( ! is.null(get(arg.names[i2]))){ - # script to execute - tempo.script <- ' - problem <- TRUE ; - if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ - text <- paste0("PROBLEM: THE ", data.name, " PARAMETER MUST BE ") ; - }else{ - text <- paste0(text, " AND "); - } - text <- paste0(text, toupper(arg.names[i2]), " ", get(arg.names[i2])) - ' - if(typeof(data) == "double" & double.as.integer.allowed == TRUE & ((arg.names[i2] == "class" & get(arg.names[i2]) == "integer") | (arg.names[i2] == "typeof" & get(arg.names[i2]) == "integer"))){ - if(! all(data%%1 == 0)){ # to check integers (use %%, meaning the remaining of a division): see the precedent line - eval(parse(text = tempo.script)) # execute tempo.script - } - }else if(eval(parse(text = paste0(arg.names[i2], "(data)"))) != get(arg.names[i2])){ - eval(parse(text = tempo.script)) # execute tempo.script - } - } - } - } - if( ! is.null(prop)){ - if(prop == TRUE){ - if(any(data < 0 | data > 1, na.rm = TRUE)){ - problem <- TRUE - if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ - text <- paste0("PROBLEM: ") - }else{ - text <- paste0(text, " AND ") - } - text <- paste0(text, "THE ", data.name, " PARAMETER MUST BE DECIMAL VALUES BETWEEN 0 AND 1") - } - } - } - if(na.contain == FALSE & any(is.na(data)) == TRUE){ - problem <- TRUE - if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ - text <- paste0("PROBLEM: ") - }else{ - text <- paste0(text, " AND ") - } - text <- paste0(text, "THE ", data.name, " PARAMETER CONTAINS NA WHILE NOT AUTHORIZED (na.contain ARGUMENT SET TO FALSE)") - } - if(neg.values == FALSE){ - if(any(data < 0, na.rm = TRUE)){ - problem <- TRUE - if(identical(text, paste0("NO PROBLEM DETECTED FOR THE ", data.name, " PARAMETER"))){ - text <- paste0("PROBLEM: ") - }else{ - text <- paste0(text, " AND ") - } - text <- paste0(text, "THE ", data.name, " PARAMETER MUST NON NEGATIVE NUMERIC VALUES") - } - } - if(print == TRUE & problem == TRUE){ - cat(paste0("\n\n================\n\n", text, "\n\n================\n\n")) - } - output <- list(problem = problem, text = text, param.name = data.name) - return(output) - } - - -######## fun_object_info() #### Recovering object information - - -# Check OK: clear to go Apollo -fun_object_info <- function(data){ - # AIM: - # provide a full description of the object - # REQUIRED FUNCTIONS - # none - # ARGUMENTS - # data: object to test - # RETURN - # a list containing the info - # EXAMPLES - # fun_object_info(data = 1:3) - # DEBUGGING - # data = NULL # for function debugging - # data = 1:3 # for function debugging - # data = matrix(1:3) # for function debugging - # data = data.frame(a = 1:3) # for function debugging - # data = factor(1:3) # for function debugging - # data = list(1:3) # for function debugging - # argument checking - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - # end argument checking - data.name <- deparse(substitute(data)) - output <- list("FILE_NAME" = data.name) - tempo <- list("FILE_HEAD" = head(data)) - output <- c(output, tempo) - if( ! is.null(data)){ - tempo <- list("FILE_TAIL" = tail(data)) - output <- c(output, tempo) - if( ! is.null(dim(data))){ - tempo <- list("FILE_DIMENSION" = dim(data)) - names(tempo[[1]]) <- c("NROW", "NCOL") - output <- c(output, tempo) - } - tempo <- list("SUMMARY" = summary(data)) - output <- c(output, tempo) - } - if(class(data) == "data.frame" | class(data) == "matrix"){ - tempo <- list("COLUM_NAMES" = names(data)) - output <- c(output, tempo) - } - if(class(data) == "data.frame"){ - tempo <- list("STRUCTURE" = ls.str(data)) - output <- c(output, tempo) - tempo <- list("COLUMN_TYPE" = sapply(data, FUN = "typeof")) - output <- c(output, tempo) - } - if(class(data) == "list"){ - tempo <- list("COMPARTMENT_NAMES" = names(data)) - output <- c(output, tempo) - } - return(output) -} - - -######## fun_1D_comp() #### comparison of two 1D datasets (vectors, factors, 1D tables) - - -# Check OK: clear to go Apollo -fun_1D_comp <- function(data1, data2){ - # AIM: - # compare two 1D datasets (vector of factor or 1D table) of the same class or not. Check and report in a list if the 2 datasets have: - # same class - # common elements - # common element names (except factors) - # common levels (factors only) - # REQUIRED FUNCTIONS - # none - # ARGUMENTS - # data1: vector or factor or 1D table - # data2: vector or factor or 1D table - # RETURN - # a list containing: - # $same.class: logical. Are class identical? - # $class: class of the 2 datasets (NULL otherwise) - # $same.length: logical. Are number of elements identical? - # $length: number of elements in the 2 datasets (NULL otherwise) - # $same.levels: logical. Are levels identical? (NULL if data1 and data2 are not factors) - # $levels: levels of the 2 datasets if identical (NULL otherwise or NULL if data1 and data2 are not factors) - # $any.id.levels: logical. Is there any identical levels? (NULL if data1 and data2 are not factors) - # $same.levels.pos1: position, in data1, of the levels identical in data2 (NULL if data1 and data2 are not factors) - # $same.levels.pos2: position, in data2, of the levels identical in data1 (NULL if data1 and data2 are not factors) - # $common.levels: common levels between data1 and data2 (can be a subset of $levels or not). NULL if no common levels or if data1 and data2 are not factors - # $same.name: logical. Are element names identical ? - # $name: name of elements of the 2 datasets if identical (NULL otherwise) - # $any.id.name: logical. Is there any element names identical ? - # $same.name.pos1: position, in data1, of the element names identical in data2 - # $same.name.pos2: position, in data2, of the elements names identical in data1 - # $common.names: common element names between data1 and data2 (can be a subset of $name or not). NULL if no common element names - # $any.id.element: logical. is there any identical elements ? - # $same.element.pos1: position, in data1, of the elements identical in data2 - # $same.element.pos2: position, in data2, of the elements identical in data1 - # $common.elements: common elements between data1 and data2. NULL if no common elements - # $identical.object: logical. Are objects identical (kind of object, element names and content)? - # $identical.content: logical. Are content objects identical (identical elements excluding kind of object and element names)? - # EXAMPLES - # obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:5] ; fun_1D_comp(obs1, obs2) - # obs1 = 1:5 ; obs2 = 1:5 ; names(obs1) <- LETTERS[1:5] ; fun_1D_comp(obs1, obs2) - # obs1 = 1:5 ; obs2 = 3:6 ; names(obs1) <- LETTERS[1:5] ; names(obs2) <- LETTERS[1:4] ; fun_1D_comp(obs1, obs2) - # obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[1:5]) ; fun_1D_comp(obs1, obs2) - # obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[10:11]) ; fun_1D_comp(obs1, obs2) - # obs1 = factor(LETTERS[1:5]) ; obs2 = factor(LETTERS[4:7]) ; fun_1D_comp(obs1, obs2) - # obs1 = 1:5 ; obs2 = factor(LETTERS[1:5]) ; fun_1D_comp(obs1, obs2) - # obs1 = 1:5 ; obs2 = 1.1:6.1 ; fun_1D_comp(obs1, obs2) - # obs1 = as.table(1:5); obs2 = as.table(1:5) ; fun_1D_comp(obs1, obs2) - # obs1 = as.table(1:5); obs2 = 1:5 ; fun_1D_comp(obs1, obs2) - # DEBUGGING - # data1 = 1:5 ; data2 = 1:5 ; names(data1) <- LETTERS[1:5] ; names(data2) <- LETTERS[1:5] # for function debugging - # argument checking - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - if( ! any(class(data1) %in% c("logical", "integer", "numeric", "character", "factor", "table"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A NON NULL VECTOR, FACTOR OR 1D TABLE\n\n================\n\n") - stop(tempo.cat) - }else if(all(class(data1) %in% "table")){ - if(length(dim(data1)) > 1){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A 1D TABLE\n\n================\n\n") - stop(tempo.cat) - } - } - if( ! any(class(data2) %in% c("logical", "integer", "numeric", "character", "factor", "table"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A NON NULL VECTOR, FACTOR OR 1D TABLE\n\n================\n\n") - stop(tempo.cat) - }else if(all(class(data2) %in% "table")){ - if(length(dim(data2)) > 1){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A 1D TABLE\n\n================\n\n") - stop(tempo.cat) - } - } - # end argument checking - same.class <- NULL - class <- NULL - same.length <- NULL - length <- NULL - same.levels <- NULL - levels <- NULL - any.id.levels <- NULL - same.levels.pos1 <- NULL - same.levels.pos2 <- NULL - common.levels <- NULL - same.name <- NULL - name <- NULL - any.id.name <- NULL - same.name.pos1 <- NULL - same.name.pos2 <- NULL - common.names <- NULL - any.id.element <- NULL - same.element.pos1 <- NULL - same.element.pos2 <- NULL - common.elements <- NULL - identical.object <- NULL - identical.content <- NULL - if(identical(data1, data2)){ - same.class <- TRUE - class <- class(data1) - same.length <- TRUE - length <- length(data1) - if(any(class(data1) %in% "factor")){ - same.levels <- TRUE - levels <- levels(data1) - any.id.levels <- TRUE - same.levels.pos1 <- 1:length(levels(data1)) - same.levels.pos2 <- 1:length(levels(data2)) - common.levels <- levels(data1) - } - if( ! is.null(names(data1))){ - same.name <- TRUE - name <- names(data1) - any.id.name <- TRUE - same.name.pos1 <- 1:length(data1) - same.name.pos2 <- 1:length(data2) - common.names <- names(data1) - } - any.id.element <- TRUE - same.element.pos1 <- 1:length(data1) - same.element.pos2 <- 1:length(data2) - common.elements <- data1 - identical.object <- TRUE - identical.content <- TRUE - }else{ - identical.object <- FALSE - if( ! identical(class(data1), class(data2))){ - same.class <- FALSE - }else{ - same.class <- TRUE - class <- class(data1) - } - if( ! identical(length(data1), length(data2))){ - same.length<- FALSE - }else{ - same.length<- TRUE - length <- length(data1) - } - if(any(class(data1) %in% "factor") & any(class(data2) %in% "factor")){ - if( ! identical(levels(data1), levels(data2))){ - same.levels <- FALSE - }else{ - same.levels <- TRUE - levels <- levels(data1) - } - any.id.levels <- FALSE - if(any(levels(data1) %in% levels(data2))){ - any.id.levels <- TRUE - same.levels.pos1 <- which(levels(data1) %in% levels(data2)) - } - if(any(levels(data2) %in% levels(data1))){ - any.id.levels <- TRUE - same.levels.pos2 <- which(levels(data2) %in% levels(data1)) - } - if(any.id.levels == TRUE){ - common.levels <- unique(c(levels(data1)[same.levels.pos1], levels(data2)[same.levels.pos2])) - } - } - if(any(class(data1) %in% "factor")){ # to compare content - data1 <- as.character(data1) - } - if(any(class(data2) %in% "factor")){ # to compare content - data2 <- as.character(data2) - } - if( ! (is.null(names(data1)) & is.null(names(data2)))){ - if( ! identical(names(data1), names(data2))){ - same.name <- FALSE - }else{ - same.name <- TRUE - name <- names(data1) - } - any.id.name <- FALSE - if(any(names(data1) %in% names(data2))){ - any.id.name <- TRUE - same.name.pos1 <- which(names(data1) %in% names(data2)) - } - if(any(names(data2) %in% names(data1))){ - any.id.name <- TRUE - same.name.pos2 <- which(names(data2) %in% names(data1)) - } - if(any.id.name == TRUE){ - common.names <- unique(c(names(data1)[same.name.pos1], names(data2)[same.name.pos2])) - } - } - any.id.element <- FALSE - if(any(data1 %in% data2)){ - any.id.element <- TRUE - same.element.pos1 <- which(data1 %in% data2) - } - if(any(data2 %in% data1)){ - any.id.element <- TRUE - same.element.pos2 <- which(data2 %in% data1) - } - if(any.id.element == TRUE){ - common.elements <- unique(c(data1[same.element.pos1], data2[same.element.pos2])) - } - if(same.length == TRUE & ! all(is.null(same.element.pos1), is.null(same.element.pos2))){ - names(same.element.pos1) <- NULL - names(same.element.pos2) <- NULL - if(identical(same.element.pos1, same.element.pos2)){ - identical.content <- TRUE - }else{ - identical.content <- FALSE - } - }else{ - identical.content <- FALSE - } - } - output <- list(same.class = same.class, class = class, same.length = same.length, length = length, same.levels = same.levels, levels = levels, any.id.levels = any.id.levels, same.levels.pos1 = same.levels.pos1, same.levels.pos2 = same.levels.pos2, common.levels = common.levels, same.name = same.name, name = name, any.id.name = any.id.name, same.name.pos1 = same.name.pos1, same.name.pos2 = same.name.pos2, common.names = common.names, any.id.element = any.id.element, same.element.pos1 = same.element.pos1, same.element.pos2 = same.element.pos2, common.elements = common.elements, identical.object = identical.object, identical.content = identical.content) - return(output) -} - - -######## fun_2D_comp() #### comparison of two 2D datasets (row & col names, dimensions, etc.) - - -# Check OK: clear to go Apollo -fun_2D_comp <- function(data1, data2){ - # AIM: - # compare two 2D datasets of the same class or not. Check and report in a list if the 2 datasets have: - # same class - # common row names - # common column names - # same row number - # same column number - # potential identical rows between the 2 datasets - # potential identical columns between the 2 datasets - # REQUIRED FUNCTIONS - # none - # ARGUMENTS - # data1: matrix, data frame or table - # data2: matrix, data frame or table - # RETURN - # a list containing: - # $same.class: logical. Are class identical ? - # $class: classes of the 2 datasets (NULL otherwise) - # $same.dim: logical. Are dimension identical ? - # $dim: dimension of the 2 datasets (NULL otherwise) - # $same.row.nb: logical. Are number of rows identical ? - # $row.nb: nb of rows of the 2 datasets if identical (NULL otherwise) - # $same.col.nb: logical. Are number of columns identical ? - # $col.nb: nb of columns of the 2 datasets if identical (NULL otherwise) - # $same.row.name: logical. Are row names identical ? - # $row.name: name of rows of the 2 datasets if identical (NULL otherwise) - # $same.col.name: logical. Are column names identical ? - # $col.name: name of columns of the 2 datasets if identical (NULL otherwise) - # $any.id.row: logical. is there identical rows ? - # $same.row.pos1: position, in data1, of the rows identical in data2 - # $same.row.pos2: position, in data2, of the rows identical in data1 - # $any.id.col: logical. is there identical columns ? - # $same.col.pos1: position in data1 of the cols identical in data2 - # $same.col.pos2: position in data2 of the cols identical in data1 - # $identical.object: logical. Are objects identical (including row & column names)? - # $identical.content: logical. Are content objects identical (identical excluding row & column names)? - # EXAMPLES - # obs1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; obs2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5]))) ; fun_2D_comp(obs1, obs2) - # DEBUGGING - # data1 = matrix(1:10, ncol = 5) ; data2 = matrix(1:10, ncol = 5) # for function debugging - # data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging - # data1 = matrix(1:15, byrow = TRUE, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:10, byrow = TRUE, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging - # data1 = matrix(1:15, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging - # data1 = matrix(1:15, ncol = 5, dimnames = list(paste0("A", letters[1:3]), LETTERS[1:5])) ; data2 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging - # data1 = matrix(1:15, ncol = 5, dimnames = list(letters[1:3], LETTERS[1:5])) ; data2 = matrix(1:12, ncol = 4, dimnames = list(letters[1:3], LETTERS[1:4])) # for function debugging - # data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = matrix(101:110, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) # for function debugging - # data1 = data.frame(a = 1:3, b= letters[1:3], row.names = LETTERS[1:3]) ; data2 = data.frame(A = 1:3, B= letters[1:3]) # for function debugging - # data1 = matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5])) ; data2 = as.data.frame(matrix(1:10, ncol = 5, dimnames = list(letters[1:2], LETTERS[1:5]))) # for function debugging - # data1 = table(Exp1 = c("A", "A", "A", "B", "B", "B"), Exp2 = c("A1", "B1", "A1", "C1", "C1", "B1")) ; data2 = data.frame(A = 1:3, B= letters[1:3]) # for function debugging - # argument checking - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - if( ! any(class(data1) %in% c("matrix", "data.frame", "table"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A MATRIX, DATA FRAME OR TABLE\n\n================\n\n") - stop(tempo.cat) - } - if( ! any(class(data2) %in% c("matrix", "data.frame", "table"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A MATRIX, DATA FRAME OR TABLE\n\n================\n\n") - stop(tempo.cat) - } - # end argument checking - same.class <- NULL - class <- NULL - same.dim <- NULL - dim <- NULL - same.row.nb <- NULL - row.nb <- NULL - same.col.nb <- NULL - col.nb <- NULL - same.row.name <- NULL - row.name <- NULL - same.col.name <- NULL - col.name <- NULL - any.id.row <- NULL - same.row.pos1 <- NULL - same.row.pos2 <- NULL - any.id.col <- NULL - same.col.pos1 <- NULL - same.col.pos2 <- NULL - identical.object <- NULL - identical.content <- NULL - if(identical(data1, data2) & any(class(data1) %in% c("matrix", "data.frame", "table"))){ - same.class <- TRUE - class <- class(data1) - same.dim <- TRUE - dim <- dim(data1) - same.row.nb <- TRUE - row.nb <- nrow(data1) - same.col.nb <- TRUE - col.nb <- ncol(data1) - same.row.name <- TRUE - row.name <- dimnames(data1)[[1]] - same.col.name <- TRUE - col.name <- dimnames(data1)[[2]] - any.id.row <- TRUE - same.row.pos1 <- 1:row.nb - same.row.pos2 <- 1:row.nb - any.id.col <- TRUE - same.col.pos1 <- 1:col.nb - same.col.pos2 <- 1:col.nb - identical.object <- TRUE - identical.content <- TRUE - }else{ - identical.object <- FALSE - if(all(class(data1) == "table") & length(dim(data1)) == 1){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT IS A 1D TABLE. USE THE info_1D_dataset_fun FUNCTION\n\n================\n\n") - stop(tempo.cat) - } - if(all(class(data2) == "table") & length(dim(data2)) == 1){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT IS A 1D TABLE. USE THE info_1D_dataset_fun FUNCTION\n\n================\n\n") - stop(tempo.cat) - } - if( ! identical(class(data1), class(data2))){ - same.class <- FALSE - }else if( ! any(class(data1) %in% c("matrix", "data.frame", "table"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 AND data2 ARGUMENTS MUST BE EITHER MATRIX, DATA FRAME OR TABLE\n\n================\n\n") - stop(tempo.cat) - }else{ - same.class <- TRUE - class <- class(data1) - } - if( ! identical(dim(data1), dim(data2))){ - same.dim <- FALSE - }else{ - same.dim <- TRUE - dim <- dim(data1) - } - if( ! identical(nrow(data1), nrow(data2))){ - same.row.nb <- FALSE - }else{ - same.row.nb <- TRUE - row.nb <- nrow(data1) - } - if( ! identical(ncol(data1), ncol(data2))){ - same.col.nb <- FALSE - }else{ - same.col.nb <- TRUE - col.nb <- ncol(data1) - } - # row and col names - if(is.null(dimnames(data1)) & is.null(dimnames(data2))){ - same.row.name <- TRUE - same.col.name <- TRUE - # row and col names remain NULL - }else if((is.null(dimnames(data1)) & ! is.null(dimnames(data2))) | ( ! is.null(dimnames(data1)) & is.null(dimnames(data2)))){ - same.row.name <- FALSE - same.col.name <- FALSE - # row and col names remain NULL - }else{ - if( ! identical(dimnames(data1)[[1]], dimnames(data2)[[1]])){ - same.row.name <- FALSE - # row names remain NULL - }else{ - same.row.name <- TRUE - row.name <- dimnames(data1)[[1]] - } - if( ! identical(dimnames(data1)[[2]], dimnames(data2)[[2]])){ - same.col.name <- FALSE - # col names remain NULL - }else{ - same.col.name <- TRUE - col.name <- dimnames(data1)[[2]] - } - } - # identical row and col content - if(all(class(data1) == "table")){ - as.data.frame(matrix(data1, ncol = ncol(data1)), stringsAsFactors = FALSE) - }else if(all(class(data1) == "matrix")){ - data1 <- as.data.frame(data1, stringsAsFactors = FALSE) - }else if(all(class(data1) == "data.frame")){ - data1 <- data.frame(lapply(data1, as.character), stringsAsFactors=FALSE) - } - if(all(class(data2) == "table")){ - as.data.frame(matrix(data2, ncol = ncol(data2)), stringsAsFactors = FALSE) - }else if(all(class(data2) == "matrix")){ - data2 <- as.data.frame(data2, stringsAsFactors = FALSE) - }else if(all(class(data2) == "data.frame")){ - data2 <- data.frame(lapply(data2, as.character), stringsAsFactors=FALSE) - } - row.names(data1) <- paste0("A", 1:nrow(data1)) - row.names(data2) <- paste0("A", 1:nrow(data2)) - if(same.col.nb == TRUE){ # because if not the same col nb, the row cannot be identical - same.row.pos1 <- suppressWarnings(which(mapply(FUN = identical, c(as.data.frame(t(data1), stringsAsFactors = FALSE)), c(as.data.frame(t(data2), stringsAsFactors = FALSE))))) - same.row.pos2 <- suppressWarnings(which(mapply(FUN = identical, c(as.data.frame(t(data2), stringsAsFactors = FALSE)), c(as.data.frame(t(data1), stringsAsFactors = FALSE))))) - names(same.row.pos1) <- NULL - names(same.row.pos2) <- NULL - if(all(is.na(same.row.pos1))){ - same.row.pos1 <- NULL - }else{ - same.row.pos1 <- same.row.pos1[ ! is.na(same.row.pos1)] - any.id.row <- TRUE - } - if(all(is.na(same.row.pos2))){ - same.row.pos2 <- NULL - }else{ - same.row.pos2 <- same.row.pos2[ ! is.na(same.row.pos2)] - any.id.row <- TRUE - } - if(is.null(same.row.pos1) & is.null(same.row.pos2)){ - any.id.row <- FALSE - } - }else{ - any.id.row <- FALSE - # same.row.pos1 and 2 remain NULL - } - if(same.row.nb == TRUE){ # because if not the same row nb, the col cannot be identical - same.col.pos1 <- suppressWarnings(which(mapply(FUN = identical, c(data1), c(data2)))) - same.col.pos2 <- suppressWarnings(which(mapply(FUN = identical, c(data2), c(data1)))) - names(same.col.pos1) <- NULL - names(same.col.pos2) <- NULL - if(all(is.na(same.col.pos1))){ - same.col.pos1 <- NULL - }else{ - same.col.pos1 <- same.col.pos1[ ! is.na(same.col.pos1)] - any.id.col <- TRUE - } - if(all(is.na(same.col.pos2))){ - same.col.pos2 <- NULL - }else{ - same.col.pos2 <- same.col.pos2[ ! is.na(same.col.pos2)] - any.id.col <- TRUE - } - if(is.null(same.col.pos1) & is.null(same.col.pos2)){ - any.id.col <- FALSE - } - }else{ - any.id.col <- FALSE - # same.col.pos1 and 2 remain NULL - } - if(same.dim == TRUE & ! all(is.null(same.row.pos1), is.null(same.row.pos2), is.null(same.col.pos1), is.null(same.col.pos2))){ # same.dim == TRUE means that same.row.nb == TRUE and same.col.nb == TRUE, meaning that row.nb != NULL and col.nb != NULL. Thus, no need to include these checkings - if(identical(same.row.pos1, 1:row.nb) & identical(same.row.pos2, 1:row.nb) & identical(same.col.pos1, 1:col.nb) & identical(same.col.pos2, 1:col.nb)){ - identical.content <- TRUE - } - }else{ - identical.content <- FALSE - } - } - output <- list(same.class = same.class, class = class, same.dim = same.dim, dim = dim, same.row.nb = same.row.nb, row.nb = row.nb, same.col.nb = same.col.nb , col.nb = col.nb, same.row.name = same.row.name, row.name = row.name, same.col.name = same.col.name, col.name = col.name, any.id.row = any.id.row, same.row.pos1 = same.row.pos1, same.row.pos2 = same.row.pos2, any.id.col = any.id.col, same.col.pos1 = same.col.pos1, same.col.pos2 = same.col.pos2, identical.object = identical.object, identical.content = identical.content) - return(output) -} - - -######## fun_list_comp() #### comparison of two lists - - -# Check OK: clear to go Apollo -fun_list_comp <- function(data1, data2){ - # AIM: - # compare two lists. Check and report in a list if the 2 datasets have: - # same length - # common names - # common compartments - # REQUIRED FUNCTIONS - # none - # ARGUMENTS - # data1: list - # data2: list - # RETURN - # a list containing: - # $same.length: logical. Are number of elements identical? - # $length: number of elements in the 2 datasets (NULL otherwise) - # $same.name: logical. Are element names identical ? - # $name: name of elements of the 2 datasets if identical (NULL otherwise) - # $any.id.name: logical. Is there any element names identical ? - # $same.name.pos1: position, in data1, of the element names identical in data2 - # $same.name.pos2: position, in data2, of the compartment names identical in data1 - # $any.id.compartment: logical. is there any identical compartments ? - # $same.compartment.pos1: position, in data1, of the compartments identical in data2 - # $same.compartment.pos2: position, in data2, of the compartments identical in data1 - # $identical.object: logical. Are objects identical (kind of object, compartment names and content)? - # $identical.content: logical. Are content objects identical (identical compartments excluding compartment names)? - # EXAMPLES - # obs1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) - # obs1 = list(1:5, LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2]) ; fun_list_comp(obs1, obs2) - # obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; fun_list_comp(obs1, obs2) - # obs1 = list(b = 1:5, c = LETTERS[1:2]) ; obs2 = list(LETTERS[5:9], matrix(1:6), 1:5) ; fun_list_comp(obs1, obs2) - # DEBUGGING - # data1 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) ; data2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) # for function debugging - # data1 = list(a = 1:5, b = LETTERS[1:2]) ; data2 = list(a = 1:5, b = LETTERS[1:2], d = matrix(1:6)) # for function debugging - # argument checking - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - if( ! any(class(data1) %in% "list")){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data1 ARGUMENT MUST BE A LIST\n\n================\n\n") - stop(tempo.cat) - } - if( ! any(class(data2) %in% "list")){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data2 ARGUMENT MUST BE A LIST\n\n================\n\n") - stop(tempo.cat) - } - # end argument checking - same.length <- NULL - length <- NULL - same.name <- NULL - name <- NULL - any.id.name <- NULL - same.name.pos1 <- NULL - same.name.pos2 <- NULL - any.id.compartment <- NULL - same.compartment.pos1 <- NULL - same.compartment.pos2 <- NULL - identical.object <- NULL - identical.content <- NULL - if(identical(data1, data2)){ - same.length <- TRUE - length <- length(data1) - if( ! is.null(names(data1))){ - same.name <- TRUE - name <- names(data1) - any.id.name <- TRUE - same.name.pos1 <- 1:length(data1) - same.name.pos2 <- 1:length(data2) - } - any.id.compartment <- TRUE - same.compartment.pos1 <- 1:length(data1) - same.compartment.pos2 <- 1:length(data2) - identical.object <- TRUE - identical.content <- TRUE - }else{ - identical.object <- FALSE - if( ! identical(length(data1), length(data2))){ - same.length<- FALSE - }else{ - same.length<- TRUE - length <- length(data1) - } - if( ! (is.null(names(data1)) & is.null(names(data2)))){ - if( ! identical(names(data1), names(data2))){ - same.name <- FALSE - }else{ - same.name <- TRUE - name <- names(data1) - } - any.id.name <- FALSE - if(any(names(data1) %in% names(data2))){ - any.id.name <- TRUE - same.name.pos1 <- which(names(data1) %in% names(data2)) - } - if(any(names(data2) %in% names(data1))){ - any.id.name <- TRUE - same.name.pos2 <- which(names(data2) %in% names(data1)) - } - } - names(data1) <- NULL - names(data2) <- NULL - any.id.compartment <- FALSE - if(any(data1 %in% data2)){ - any.id.compartment <- TRUE - same.compartment.pos1 <- which(data1 %in% data2) - } - if(any(data2 %in% data1)){ - any.id.compartment <- TRUE - same.compartment.pos2 <- which(data2 %in% data1) - } - if(same.length == TRUE & ! all(is.null(same.compartment.pos1), is.null(same.compartment.pos2))){ - if(identical(same.compartment.pos1, same.compartment.pos2)){ - identical.content <- TRUE - }else{ - identical.content <- FALSE - } - }else{ - identical.content <- FALSE - } - } - output <- list(same.length = same.length, length = length, same.name = same.name, name = name, any.id.name = any.id.name, same.name.pos1 = same.name.pos1, same.name.pos2 = same.name.pos2, any.id.compartment = any.id.compartment, same.compartment.pos1 = same.compartment.pos1, same.compartment.pos2 = same.compartment.pos2, identical.object = identical.object, identical.content = identical.content) - return(output) -} - - -################ Object modification - - -######## fun_dataframe_remodeling() #### remodeling a data frame to have column name as a qualitative column and vice-versa - - -# Check OK: clear to go Apollo -fun_dataframe_remodeling <- function(data, quanti.col.name = "quanti", quali.col.name = "quali"){ - # AIM: - # if the data frame is made of numeric columns, a new data frame is created, with the 1st column gathering all the numeric values, and the 2nd column being the name of the columns of the initial data frame - - - - # If the data frame is made of one numeric column and one character or factor column, a new data frame is created, with the new columns corresponding to the split numeric values (according to the character column). NA are added a the end of each column to have the same number of rows - - - - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS - # data: data frame to convert - # quanti.col.name: optional name for the quanti column of the new data frame - # quali.col.name: optional name for the quali column of the new data frame - # RETURN - # the modified data frame - # EXAMPLES - # obs <- data.frame(col1 = (1:4)*10, col2 = c("A", "B", "A", "A")) ; obs ; fun_dataframe_remodeling(obs) - # obs <- data.frame(col1 = (1:4)*10, col2 = 5:8) ; obs ; fun_dataframe_remodeling(obs, quanti.col.name = "quanti", quali.col.name = "quali") - # DEBUGGING - # data = data.frame(a = 1:3, b = 4:6) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging - # data = data.frame(a = 1:3, b = 4:6, c = 11:13) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging - # data = data.frame(a = 1:3, b = letters[1:3]) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging - # data = data.frame(a = 1:3, b = letters[1:3]) ; quanti.col.name = "TEST" ; quali.col.name = "quali" # for function debugging - # data = data.frame(b = letters[1:3], a = 1:3) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging - # data = data.frame(b = c("e", "e", "h"), a = 1:3) ; quanti.col.name = "quanti" ; quali.col.name = "quali" # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = quanti.col.name, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = quali.col.name, class = "character", length = 1) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - if( ! any(class(data) %in% "data.frame")){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data ARGUMENT MUST BE A DATA FRAME\n\n================\n\n") - stop(tempo.cat) - } - # end argument checking - tempo.factor <- unlist(lapply(data, class)) - for(i in 1:length(tempo.factor)){ # convert factor columns as character - if(all(tempo.factor[i] == "factor")){ - data[, i] <- as.character(data[, i]) - } - } - tempo.factor <- unlist(lapply(data, mode)) - if(length(data) == 2){ - if( ! ((mode(data[, 1]) == "character" & mode(data[, 2]) == "numeric") | mode(data[, 2]) == "character" & mode(data[, 1]) == "numeric" | mode(data[, 2]) == "numeric" & mode(data[, 1]) == "numeric") ){ - tempo.cat <- paste0("\n\n================\n\nERROR: IF data ARGUMENT IS A DATA FRAME MADE OF 2 COLUMNS, EITHER A COLUMN MUST BE NUMERIC AND THE OTHER CHARACTER, OR THE TWO COLUMNS MUST BE NUMERIC\n\n================\n\n") - stop(tempo.cat) - } - if((mode(data[, 1]) == "character" | mode(data[, 2]) == "character") & (quanti.col.name != "quanti" | quali.col.name != "quali")){ - tempo.cat <- paste0("\n\n================\n\nERROR: IMPROPER quanti.col.name OR quali.col.name RESETTINGS. THESE ARGUMENTS ARE RESERVED FOR DATA FRAMES MADE OF n NUMERIC COLUMNS ONLY\n\n================\n\n") - stop(tempo.cat) - } - }else{ - if( ! all(tempo.factor %in% "numeric")){ - tempo.cat <- paste0("\n\n================\n\nERROR: IF data ARGUMENT IS A DATA FRAME MADE OF ONE COLUMN, OR MORE THAN 2 COLUMNS, THESE COLUMNS MUST BE NUMERIC\n\n================\n\n") - stop(tempo.cat) - } - } - if(( ! any(tempo.factor %in% "character")) & is.null(names(data))){ - tempo.cat <- paste0("\n\n================\n\nERROR: NUMERIC DATA FRAME in the data ARGUMENT MUST HAVE COLUMN NAMES\n\n================\n\n") - stop() - } - if(all(tempo.factor %in% "numeric")){ - quanti <- NULL - for(i in 1:length(data)){ - quanti <-c(quanti, data[, i]) - } - quali <- rep(names(data), each = nrow(data)) - output.data <- data.frame(quanti, quali) - names(output.data) <- c(quanti.col.name, quali.col.name) - }else{ - if(class(data[, 1]) == "character"){ - data <- cbind(data[2], data[1]) - } - nc.max <- max(table(data[, 2])) # effectif maximum des classes - nb.na <- nc.max - table(data[,2]) # nombre de NA à ajouter pour réaliser la data frame - tempo<-split(data[, 1], data[, 2]) - for(i in 1:length(tempo)){tempo[[i]] <- append(tempo[[i]], rep(NA, nb.na[i]))} # des NA doivent être ajoutés lorsque les effectifs sont différents entre les classes. C'est uniquement pour que chaque colonne ait le même nombre de lignes - output.data<-data.frame(tempo) - } - return(output.data) -} - - -######## fun_refactorization() #### remove classes that are not anymore present in factors or factor columns in data frames - - -# Check OK: clear to go Apollo -fun_refactorization <- function(data, also.ordered = TRUE){ - # AIM: - # refactorize a factor or the factor columns of a data frame, such as only the class present are in the levels (no empty levels). The class order in levels is kept - # useful to remove the empty classes after row removing for instance - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS - # data: factor (ordered or not) or data frame - # also.ordered: refactorize also ordered factors? This to deal with ordered factors that have class "ordered" "factor" - # RETURN - # a list containing: - # $data: the modified object - # $removed: the removed classes for a factor and a list of the removed classes for each factor class of the data frame - # EXAMPLES - # obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, FALSE) - # obs <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A")[-c(1:2),] ; sapply(obs, levels) ; fun_refactorization(obs, TRUE) - # obs <- factor(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) - # obs <- ordered(LETTERS[1:6])[-c(1:2)] ; obs ; fun_refactorization(obs, TRUE) - # obs <- factor(LETTERS[1:6], levels = rev(LETTERS[1:6]))[-c(1:2)] ; obs ; fun_refactorization(obs, FALSE) - # DEBUGGING - # data <- data.frame(a = LETTERS[1:6], b = paste0(letters[1.6], c(1,1,2,2,3,3)), c = ordered(LETTERS[7:12]), d = 1:6, e = "A") ; data <- data[-c(1:2),] ; also.ordered <- TRUE # for function debugging - # data <- factor(LETTERS[1:6])[-c(1:2)] ; also.ordered <- TRUE # for function debugging - # data <- ordered(LETTERS[1:6])[-c(1:2)] ; also.ordered <- TRUE # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = also.ordered, class = "logical", length = 1) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - if(also.ordered == FALSE){ - if( ! (all(class(data) == "data.frame") | all(class(data) == "factor"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A FACTOR (NON ORDERED BECAUSE THE also.ordered ARGUMENT IS SET TO FALSE) OR A DATA FRAME\n\n================\n\n") - stop(tempo.cat) - } - } - if(also.ordered == TRUE){ - if( ! (all(class(data) == "data.frame") | all(class(data) == "factor") | all(class(data) %in% c("ordered", "factor")))){ - tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A FACTOR OR A DATA FRAME\n\n================\n\n") - stop(tempo.cat) - } - } - # end argument checking - text <- NULL - if(all(class(data) == "factor")){ - tempo.keep.log <- levels(data) %in% unique(data) - text <- levels(data)[ ! tempo.keep.log] - data <- factor(data, levels = levels(data)[tempo.keep.log]) - }else if(all(class(data) %in% c("ordered", "factor"))){ - tempo.keep.log <- levels(data) %in% unique(data) - text <- levels(data)[ ! tempo.keep.log] - data <- ordered(data, levels = levels(data)[tempo.keep.log]) - }else if(all(class(data) == "data.frame")){ - text <- vector("list", length(data)) - names(text) <- names(data) - tempo.factor.col <- sapply(sapply(lapply(data, class), FUN = "%in%", "factor"), FUN = "all") # get the factor column (logical) - for(i in 1:length(tempo.factor.col)){ - if(tempo.factor.col[i] == TRUE){ - tempo.keep.log <- levels(data[[i]]) %in% unique(data[[i]]) - text[[i]] <- levels(data[[i]])[ ! tempo.keep.log] - data[[i]] <- factor(data[[i]], levels = levels(data[[i]])[tempo.keep.log]) - } - } - tempo.ordered.col <- sapply(sapply(lapply(data, class), FUN = "%in%", "ordered"), FUN = "any") # get the ordered factor column (logical) if they exist - if(also.ordered == TRUE){ - for(i in 1:length(tempo.ordered.col)){ - if(tempo.ordered.col[i] == TRUE){ - tempo.keep.log <- levels(data[[i]]) %in% unique(data[[i]]) - text[[i]] <- levels(data[[i]])[ ! tempo.keep.log] - data[[i]] <- ordered(data[[i]], levels = levels(data[[i]])[tempo.keep.log]) - } - } - } - text <- text[(tempo.factor.col | tempo.ordered.col) & ! (sapply(text, FUN = length) == 0)] # remove the compartments of text that are not modified factors columns of data frame - } - output <- list(data = data, removed = text) - return(output) -} - - -######## fun_rounding() #### Rounding number if decimal present - - -# Check OK: clear to go Apollo -fun_rounding <- function(data, dec.nb = 2, after.lead.zero = TRUE){ - # AIM: - # round a vector of values, if decimal, with the desired number of decimal digits after the decimal leading zeros - # BEWARE - # Work well with numbers as character strings, but not always with numerical numbers because of the floating point - # Numeric values are really truncated from a part of their decimal digits, whatever options(digits) settings - # ARGUMENTS - # data: a vector of numbers (numeric or character mode) - # dec.nb: number of required decimal digits - # after.lead.zero: logical. If FALSE, rounding is performed for all the decimal numbers, whatever the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.00). If TRUE, dec.nb are taken after the leading zeros (e.g., 0.123 -> 0.12 and 0.00128 -> 0.0013) - # REQUIRED FUNCTIONS - # fun_param_check() - # RETURN - # the modified vector - # EXAMPLES - # cat(fun_rounding(data = c(10, 100.001, 333.0001254, 12312.1235), dec.nb = 2, after.lead.zero = FALSE)) - # cat(fun_rounding(data = c("10", "100.001", "333.0001254", "12312.1235"), dec.nb = 2, after.lead.zero = FALSE)) - # DEBUGGING - # data = data = c(10, 100.001, 333.0001254, 12312.1235) ; dec.nb = 2 ; after.lead.zero = FALSE # # for function debugging - # data = data = c("10", "100.001", "333.0001254", "12312.1235") ; dec.nb = 2 ; after.lead.zero = TRUE # # for function debugging - # argument checking - if( ! (all(typeof(data) == "character") | all(typeof(data) == "double") | all(typeof(data) == "integer"))){ - tempo.cat <- paste0("\n\n================\n\nERROR: data ARGUMENT MUST BE A VECTOR OF NUMBERS (IN NUMERIC OR CHARACTER MODE)\n\n================\n\n") - stop(tempo.cat) - } - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = dec.nb, typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = after.lead.zero, class = "logical", length = 1) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - # end argument checking - tempo <- grepl(x = data, pattern = "\\.") # detection of decimal numbers - ini.mode <- mode(data) - data <- as.character(data) # to really truncate decimal digits - for(i in 1:length(data)){ # scan all the numbers of the vector - if(tempo[i] == TRUE){ # means decimal number - if(after.lead.zero == TRUE){ - zero.pos <- unlist(gregexpr(text=data[i], pattern = 0)) # recover all the position of the zeros in the number. -1 if no zeros (do not record the leading and trailing zeros) - }else{ - zero.pos <- -1 # -1 as if no zero - } - dot.pos <- unlist(gregexpr(text=data[i], pattern = "\\.")) # recover all the position of the zeros in the number - digit.pos <- unlist(gregexpr(text=data[i], pattern = "[[:digit:]]")) # recover all the position of the digits in the number - dec.pos <- digit.pos[digit.pos > dot.pos] - count <- 0 - while((dot.pos + count + 1) %in% zero.pos & (dot.pos + count + 1) <= max(dec.pos) & (count + dec.nb) < length(dec.pos)){ # count the number of leading zeros in the decimal part - count <- count + 1 - } - data[i] <- formatC(as.numeric(data[i]), digits = (count + dec.nb), format = "f") - } - } - if(ini.mode != "character"){ - data <- as.numeric(data) - } - return(data) -} - - -######## fun_90clock_matrix_rot() #### 90° clockwise matrix rotation - - -# Check OK: clear to go Apollo -fun_90clock_matrix_rot <- function(data){ - # AIM: - # 90° clockwise matrix rotation - # applied twice, the function provide the mirror matrix, according to vertical and horizontal symmetry - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS - # data: matrix (matrix class) - # RETURN - # the modified matrix - # EXAMPLES - # obs <- matrix(1:10, ncol = 1) ; obs ; fun_90clock_matrix_rot(obs) - # obs <- matrix(LETTERS[1:10], ncol = 5) ; obs ; fun_90clock_matrix_rot(obs) - # DEBUGGING - # data = matrix(1:10, ncol = 1) - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - if( ! any(class(data) %in% "matrix")){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE data ARGUMENT MUST BE A MATRIX\n\n================\n\n") - stop(tempo.cat) - } - # end argument checking - for (i in 1:ncol(data)){data[,i] <- rev(data[,i])} - data <- t(data) - return(data) -} - - -######## fun_hexa_hsv_color_matrix() #### Conversion of a numeric matrix into hexadecimal color matrix - - -# Check OK: clear to go Apollo -fun_hexa_hsv_color_matrix <- function(mat1, mat.hsv.h = TRUE, notch = 1, s = 1, v = 1, forced.color = NULL){ - # AIM: - # convert a matrix made of numbers into a hexadecimal matrix for rgb colorization - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS: - # mat1: matrix 1 of non negative numerical values that has to be colored (matrix class). NA allowed - # mat.hsv.h: logical. Is mat1 the h of hsv colors ? (if TRUE, mat1 must be between zero and 1) - # notch: single value between 0 and 1 to shift the successive colors on the hsv circle by + notch - # s: s argument of hsv(). Must be between 0 and 1 - # v: v argument of hsv(). Must be between 0 and 1 - # forced.color: Must be NULL or hexadecimal color code or name given by colors(). The first minimal values of mat1 will be these colors. All the color of mat1 can be forced using this argument - # RETURN - # a list containing: - # $mat1.name: name of mat1 - # $colored.mat: colors of mat1 in hexa - # $problem: logical. Is any colors of forced.color overlap the colors designed by the function. NULL if forced.color = NULL - # $text.problem: text when overlapping colors. NULL if forced.color = NULL or problem == FALSE - # EXAMPLES - # mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]) ; fun_hexa_hsv_color_matrix(mat1, mat.hsv.h = FALSE, notch = 1, s = 1, v = 1, forced.color = NULL) - # DEBUGGING - # mat1 = matrix(c(1,1,1,2,1,5,9,NA), ncol = 2) ; dimnames(mat1) <- list(LETTERS[1:4], letters[1:2]); mat.hsv.h = FALSE ; notch = 1 ; s = 1 ; v = 1 ; forced.color = c(hsv(1,1,1), hsv(0,0,0)) # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = mat1, mode = "numeric", class = "matrix", na.contain = TRUE, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = mat.hsv.h, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = notch, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) - tempo <- fun_param_check(data = s, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) - tempo <- fun_param_check(data = v, mode = "numeric", length = 1, prop = TRUE) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - if(mat.hsv.h == TRUE & fun_param_check(data = mat1, mode = "numeric", prop = TRUE, print = FALSE)$problem == TRUE){ - tempo.cat <- paste0("\n\n================\n\nERROR: mat1 ARGUMENT MUST BE A MATRIX OF PROPORTIONS SINCE THE mat.hsv.h ARGUMENT IS SET TO TRUE\n\n================\n\n") - stop(tempo.cat) - } - if( ! is.null(forced.color)){ - tempo <- fun_param_check(data = forced.color, class = "character") - if(tempo$problem == TRUE){ - stop() - } - if( ! all(forced.color %in% colors() | grepl(pattern = "^#", forced.color))){ # check that all strings of forced.color start by # - tempo.cat <- paste0("\n\n================\n\nERROR: forced.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # AND/OR COLOR NAMES GIVEN BY colors()\n\n================\n\n") - stop(tempo.cat) - } - } - # end argument checking - problem <- NULL - text.problem <- NULL - mat1.name <- deparse(substitute(mat1)) - # change the scale of the plotted matrix - if(mat.hsv.h == TRUE){ - if(any(min(mat1, na.rm = TRUE) < 0 | max(mat1, na.rm = TRUE) > 1, na.rm = TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: mat1 MUST BE MADE OF VALUES BETWEEN 0 AND 1 BECAUSE mat.hsv.h ARGUMENT SET TO TRUE\n\n================\n\n") - stop(tempo.cat) - } - }else{ - if(any(mat1 - floor(mat1) > 0, na.rm = TRUE) | any(mat1 == 0, na.rm = TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: mat1 MUST BE MADE OF INTEGER VALUES WITHOUT 0 BECAUSE mat.hsv.h ARGUMENT SET TO FALSE\n\n================\n\n") - stop(tempo.cat) - }else{ - mat1 <- mat1 / max(mat1, na.rm = TRUE) - } - } - if(notch != 1){ - different.color <- unique(as.vector(mat1)) - different.color <- different.color[ ! is.na(different.color)] - tempo.different.color <- different.color + c(0, cumsum(rep(notch, length(different.color) - 1))) - tempo.different.color <- tempo.different.color - floor(tempo.different.color) - if(any(duplicated(tempo.different.color) == TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: DUPLICATED VALUES AFTER USING notch (", paste(tempo.different.color[duplicated(tempo.different.color)], collapse = " "), "). TRY ANOTHER notch VALUE\n\n================\n\n") - stop(tempo.cat) - }else if(length(different.color) != length(tempo.different.color)){ - tempo.cat <- paste0("\n\n================\n\nERROR: LENGTH OF different.color (", paste(different.color, collapse = " "), ") DIFFERENT FROM LENGTH OF tempo.different.color (", paste(tempo.different.color, collapse = " "), ")\n\n================\n\n") - stop(tempo.cat) - }else{ - for(i in 1:length(different.color)){ - mat1[mat1 == different.color[i]] <- tempo.different.color[i] - } - } - } - if( ! is.null(forced.color)){ - hexa.values.to.change <- hsv(unique(sort(mat1))[1:length(forced.color)], s, v) - } - mat1[ ! is.na(mat1)] <- hsv(mat1[ ! is.na(mat1)], s, v) - if( ! is.null(forced.color)){ - if(any(forced.color %in% mat1, na.rm = TRUE)){ - problem <- TRUE - text.problem <- paste0("THE FOLLOWING COLORS WHERE INTRODUCED USING forced.color BUT WHERE ALREADY PRESENT IN THE COLORED MATRIX :", paste(forced.color[forced.color %in% mat1], collapse = " ")) - }else{ - problem <- FALSE - } - for(i in 1:length(hexa.values.to.change)){ - if( ! any(mat1 == hexa.values.to.change[i], na.rm = TRUE)){ - tempo.cat <- paste0("\n\n================\n\nERROR: THE ", hexa.values.to.change[i], " VALUE FROM hexa.values.to.change IS NOT REPRESENTED IN mat1 : ", paste(unique(as.vector(mat1)), collapse = " "), "\n\n================\n\n") - stop(tempo.cat) - }else{ - mat1[which(mat1 == hexa.values.to.change[i])] <- forced.color[i] - } - } - } - output <- list(mat1.name = mat1.name, colored.mat = mat1, problem = problem, text.problem = text.problem) - return(output) -} - - -################ Graphics - - -# this order can be used: -# fun_window_width_resizing() -# fun_open_window() -# fun_graph_param_prior_plot() # not for ggplot2 -# plot() or any other plotting -# fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 -# fun_close_specif_window() - - -######## fun_window_width_resizing() #### window width depending on classes to plot - - -# Check OK: clear to go Apollo -fun_window_width_resizing <- function(class.nb, inches.per.class.nb = 1, ini.window.width = 7, inch.left.space, inch.right.space, boundarie.space = 0.5){ - # AIM: - # rescale the width of a window to open depending on the number of classes to plot - # can be used for height, considering that it is as if it was a width - # this order can be used: - # fun_window_width_resizing() - # fun_open_window() - # fun_graph_param_prior_plot() # not for ggplot2 - # plot() or any other plotting - # fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 - # fun_close_specif_window() - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS - # class.nb: number of class to plot - # inches.per.class.nb: number of inches per unit of class.nb. 2 means 2 inches for each boxplot for instance - # ini.window.width:initial window width in inches - # inch.left.space: left horizontal margin of the figure region (in inches) - # inch.right.space: right horizontal margin of the figure region (in inches) - # boundarie.space: space between the right and left limits of the plotting region and the plot (0.5 means half a class width) - # RETURN - # the new window width in inches - # EXAMPLES - # fun_window_width_resizing(class.nb = 10, inches.per.class.nb = 0.2, ini.window.width = 7, inch.left.space = 1, inch.right.space = 1, boundarie.space = 0.5) - # DEBUGGING - # class.nb = 10 ; inches.per.class.nb = 0.2 ; ini.window.width = 7 ; inch.left.space = 1 ; inch.right.space = 1 ; boundarie.space = 0.5 # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = class.nb, typeof = "integer", length = 1, double.as.integer.allowed = TRUE, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = inches.per.class.nb, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = ini.window.width, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = inch.left.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = inch.right.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = boundarie.space, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - # end argument checking - range.max <- class.nb + boundarie.space # the max range of the future plot - range.min <- boundarie.space # the min range of the future plot - window.width <- inch.left.space + inch.right.space + inches.per.class.nb * (range.max - range.min) - return(window.width) -} - - -######## fun_open_window() #### Open a GUI or pdf graphic window - - -# Check OK: clear to go Apollo -fun_open_window <- function(pdf.disp = TRUE, path.fun = "working.dir", pdf.name.file = "graph", width.fun = 7, height.fun = 7, paper = "special", no.pdf.overwrite = TRUE, return.output = FALSE){ - # AIM: - # open a pdf or screen (GUI) graphic window - # BEWARE: on Linux, use pdf.disp = TRUE, if (GUI) graphic window is not always available, meaning that X is not installed (clusters for instance). Use X11() in R to test if available - # this order can be used: - # fun_window_width_resizing() - # fun_open_window() - # fun_graph_param_prior_plot() # not for ggplot2 - # plot() or any other plotting - # fun_feature_post_plot() if fun_graph_param_prior_plot() has been used # not for ggplot2 - # fun_close_specif_window() - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS: - # pdf.disp: use pdf or not - # path.fun: where the pdf is saved. Must not finish by a path separator. Write "working.dir" if working directory is required (default) - # pdf.name.file: name of the pdf file containing the graphs (the .pdf extension is added by the function) - # width.fun: width of the windows (in inches) - # height.fun: height of the windows (in inches) - # paper: paper argument of the pdf function (paper format). Only used for pdf(). Either "a4", "letter", "legal", "us", "executive", "a4r", "USr" or "special". If "special", means that width.fun and height.fun specify the paper size - # no.pdf.overwrite: existing pdf can be overwritten ? Only used if pdf.disp = TRUE - # return.output: return output ? If TRUE but function not assigned, the output list is displayed - # RETURN - # a list containing: - # $pdf.loc: path of the pdf created - # $ini.par: initial par() parameters (to reset in a new graph) - # $zone.ini: initial window spliting (to reset in a new graph) - # EXAMPLES - # fun_open_window(pdf.disp = FALSE, path.fun = "C:/Users/Gael/Desktop", pdf.name.file = "graph", width.fun = 7, height.fun = 7, paper = "special", no.pdf.overwrite = TRUE, return.output = TRUE) - # DEBUGGING - # pdf.disp = TRUE ; path.fun = "C:/Users/Gael/Desktop" ; pdf.name.file = "graphs" ; width.fun = 7 ; height.fun = 7 ; paper = "special" ; no.pdf.overwrite = TRUE ; return.output = TRUE # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = pdf.disp, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = path.fun, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = pdf.name.file, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = width.fun, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = height.fun, mode = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = path.fun, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = paper, options = c("a4", "letter", "legal", "us", "executive", "a4r", "USr", "special", "A4", "LETTER", "LEGAL", "US"), length = 1) ; eval(ee) - tempo <- fun_param_check(data =no.pdf.overwrite, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = return.output, class = "logical", length = 1) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - # end argument checking - if(path.fun == "working.dir"){ - path.fun <- getwd() - }else{ - if(dir.exists(path.fun) == FALSE){ - tempo.cat <- paste0("\n\n================\n\nERROR: path.fun ARGUMENT DOES NOT CORRESPOND TO EXISTING DIRECTORY\n\n================\n\n") - stop(tempo.cat) - } - } - if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows - tempo <- NULL - windows() - ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) - invisible(dev.off()) # close the new window - }else if(Sys.info()["sysname"] == "Linux"){ - if( ! file.exists(paste0(getwd(), "/Rplots.pdf"))){ - tempo <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window or a pdf. So no need to use again X11(). tempo == NULL if no problem, meaning that the X11 window is opened. If tempo != NULL, a pdf is open here paste0(getwd(), "/Rplots.pdf") - ini.par <- par(no.readonly = TRUE) # recover the initial graphical parameters. Works even if X11 is not working as R opens a pdf - invisible(dev.off()) # can be used here to close the pdf windows if tempo != NULL and to close the X11 window if tempo == NULL - }else{ - tempo.cat <- paste0("\n\n================\n\nPROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN\n\n================\n\n") - stop(tempo.cat) - } - }else{ - tempo <- NULL - quartz() - ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) - invisible(dev.off()) # close the new window - } - zone.ini <- matrix(1, ncol=1) # to recover the initial parameters for next figure region when device region split into several figure regions - if(pdf.disp == TRUE){ - pdf.loc <- paste0(path.fun, "/", pdf.name.file, ".pdf") - if(file.exists(pdf.loc) == TRUE & no.pdf.overwrite == TRUE){ - tempo.cat <- paste0("\n\n================\n\nERROR: pdf.loc FILE ALREADY EXISTS AND CANNOT BE OVERWRITTEN DUE TO no.pdf.overwrite ARGUMENT SET TO TRUE\n\n================\n\n") - stop(tempo.cat) - }else{ - pdf(width = width.fun, height = height.fun, file=pdf.loc, paper = paper) - } - }else if(pdf.disp == FALSE){ - pdf.loc <- NULL - if(Sys.info()["sysname"] == "Windows"){ # .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows - windows(width = width.fun, height = height.fun, rescale="fixed") - }else if(Sys.info()["sysname"] == "Linux"){ - if( ! is.null(tempo)){ - stop("PROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN") - }else{ - X11(width = width.fun, height = height.fun) - } - }else{ - quartz(width = width.fun, height = height.fun) - } - } - if(return.output == TRUE){ - output <- list(pdf.loc = pdf.loc, ini.par = ini.par, zone.ini = zone.ini) - return(output) - } -} - - -######## fun_graph_param_prior_plot() #### Graph param before plotting - - -# Check OK: clear to go Apollo -fun_graph_param_prior_plot <- function(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, std.x.range = TRUE, std.y.range = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 3.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE){ - # AIM: - # very convenient to erase the axes for post plot axis redrawing using fun_feature_post_plot() - # reinitialize and set the graphic parameters before plotting - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS - # param.reinitial: reinitialize graphic parameters before applying the new ones, as defined by the other arguments? Either TRUE or FALSE - # xlog.scale: Log scale for the x-axis? Either TRUE or FALSE. If TRUE, erases the x-axis, except legend, for further drawing by fun_feature_post_plot()(xlog argument of par()) - # ylog.scale: Log scale for the y-axis? Either TRUE or FALSE. If TRUE, erases the y-axis, except legend, for further drawing by fun_feature_post_plot()(ylog argument of par()) - # remove.label: remove labels (axis legend) of the two axes? Either TRUE or FALSE (ann argument of par()) - # remove.x.axis: remove x-axis except legend? Either TRUE or FALSE (control the xaxt argument of par()). Automately set to TRUE if xlog.scale == TRUE - # remove.y.axis: remove y-axis except legend? Either TRUE or FALSE (control the yaxt argument of par()). Automately set to TRUE if ylog.scale == TRUE - # std.x.range: standard range on the x-axis? TRUE (no range extend) or FALSE (4% range extend). Controls xaxs argument of par() (TRUE is xaxs = "i", FALSE is xaxs = "r") - # std.y.range: standard range on the y-axis? TRUE (no range extend) or FALSE (4% range extend). Controls yaxs argument of par() (TRUE is yaxs = "i", FALSE is yaxs = "r") - # down.space: lower vertical margin (in inches, mai argument of par()) - # left.space: left horizontal margin (in inches, mai argument of par()) - # up.space: upper vertical margin between plot region and grapical window (in inches, mai argument of par()) - # right.space: right horizontal margin (in inches, mai argument of par()) - # orient: scale number orientation (las argument of par()). 0, always parallel to the axis; 1, always horizontal; 2, always perpendicular to the axis; 3, always vertical - # dist.legend: numeric value that moves axis legends away in inches (first number of mgp argument of par() but in inches thus / 0.2) - # tick.length: length of the ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc. 0 means no tick - # box.type: bty argument of par(). Either "o", "l", "7", "c", "u", "]", the resulting box resembles the corresponding upper case letter. A value of "n" suppresses the box - # amplif.label: increase or decrease the size of the text in legends - # amplif.axis: increase or decrease the size of the scale numbers in axis - # display.extend: extend display beyond plotting region? Either TRUE or FALSE (xpd argument of par() without NA) - # return.par: return graphic parameter modification? - # RETURN - # return graphic parameter modification - # EXAMPLES - # fun_graph_param_prior_plot(param.reinitial = FALSE, xlog.scale = FALSE, ylog.scale = FALSE, remove.label = TRUE, remove.x.axis = TRUE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 4.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = FALSE) - # DEBUGGING - # param.reinitial = FALSE ; xlog.scale = FALSE ; ylog.scale = FALSE ; remove.label = TRUE ; remove.x.axis = TRUE ; remove.y.axis = TRUE ; down.space = 1 ; left.space = 1 ; up.space = 1 ; right.space = 1 ; orient = 1 ; dist.legend = 4.5 ; tick.length = 0.5 ; box.type = "n" ; amplif.label = 1 ; amplif.axis = 1 ; display.extend = FALSE ; return.par = FALSE # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = param.reinitial, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = xlog.scale, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = ylog.scale, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = remove.label, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = remove.x.axis, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = remove.y.axis, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = std.x.range, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = std.y.range, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = down.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = left.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = up.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = right.space, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = orient, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) - tempo <- fun_param_check(data = box.type, options = c("o", "l", "7", "c", "u", "]", "n"), length = 1) ; eval(ee) - tempo <- fun_param_check(data = amplif.label, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = amplif.axis, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = display.extend, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = return.par, class = "logical", length = 1) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - # end argument checking - if(param.reinitial == TRUE){ - if( ! all(names(dev.cur()) == "null device")){ - active.wind.nb <- dev.cur() - }else{ - active.wind.nb <- 0 - } - if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows - windows() - }else if(Sys.info()["sysname"] == "Linux"){ - if( ! file.exists(paste0(getwd(), "/Rplots.pdf"))){ - tempo <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window or a pdf. So no need to use again X11(). tempo == NULL if no problem, meaning that the X11 window is opened. If tempo != NULL, a pdf is open here paste0(getwd(), "/Rplots.pdf") - }else{ - tempo.cat <- paste0("\n\n================\n\nPROBLEM: THIS FUNCTION CANNOT OPEN GUI ON LINUX OR NON MACOS UNIX SYSTEM (X GRAPHIC INTERFACE HAS TO BE SET.\nTO OVERCOME THIS, PLEASE SET pdf.disp ARGUMENT TO TRUE AND RERUN\n\n================\n\n") - stop(tempo.cat) - } - }else{ # macOS - quartz() - } - ini.par <- par(no.readonly = TRUE) # to recover the initial graphical parameters if required (reset) - invisible(dev.off()) # close the new window - if( ! all(names(dev.cur()) == "null device")){ - dev.set(active.wind.nb) # go back to the active windows if exists - par(ini.par) # apply the initial par to current window - } - } - if(remove.x.axis == TRUE){ - par(xaxt = "n") # suppress the y-axis label - }else{ - par(xaxt = "s") - } - if(remove.y.axis == TRUE){ - par(yaxt = "n") # suppress the y-axis label - }else{ - par(yaxt = "s") - } - if(std.x.range == TRUE){ - par(xaxs = "i") - }else{ - par(xaxs = "r") - } - if(std.y.range == TRUE){ - par(yaxs = "i") - }else{ - par(yaxs = "r") - } - par(mai = c(down.space, left.space, up.space, right.space), ann = ! remove.label, las = orient, mgp = c(dist.legend/0.2, 1, 0), xpd = display.extend, bty= box.type, cex.lab = amplif.label, cex.axis = amplif.axis) - par(tcl = -par()$mgp[2] * tick.length) # tcl gives the length of the ticks as proportion of line text, knowing that mgp is in text lines. So the main ticks are a 0.5 of the distance of the axis numbers by default. The sign provides the side of the tick (negative for outside of the plot region) - if(xlog.scale == TRUE){ - par(xaxt = "n", xlog = TRUE) # suppress the x-axis label - }else{ - par(xlog = FALSE) - } - if(ylog.scale == TRUE){ - par(yaxt = "n", ylog = TRUE) # suppress the y-axis label - }else{ - par(ylog = FALSE) - } - if(return.par == TRUE){ - tempo.par <- par() - return(tempo.par) - } -} - - -######## fun_feature_post_plot() #### Graph param after plotting - - -# Check OK: clear to go Apollo -fun_feature_post_plot <- function(x.side = 0, x.log.scale = FALSE, x.categ = NULL, x.categ.pos = NULL, x.lab = "", x.axis.magnific = 1.5, x.label.magnific = 1.5, x.dist.legend = 0.5, x.nb.inter.tick = 1, y.side = 0, y.log.scale = FALSE, y.categ = NULL, y.categ.pos = NULL, y.lab = "", y.axis.magnific = 1.5, y.label.magnific = 1.5, y.dist.legend = 0.5, y.nb.inter.tick = 1, text.angle = 90, tick.length = 0.5, sec.tick.length = 0.3, bg.color = NULL, grid.lwd = NULL, grid.col = "white", corner.text = "", magnific = 1.5, magnific.corner.text = 1, just.label.add = FALSE, par.reset = FALSE, custom.par = NULL){ - # AIM: - # redesign axis. If x.side = 0, y.side = 0, the function just adds text at topright of the graph and reset par() for next graphics and provides outputs (see below) - # provide also positions for legend or additional text on the graph - # use fun_graph_param_prior_plot() before this function for initial inactivation of the axis drawings - # REQUIRED FUNCTIONS - # fun_param_check() - # fun_open_window() to reinitialize graph parameters if par.reset = TRUE and custom.par = NULL - # ARGUMENTS - # x.side: axis at the bottom (1) or top (3) of the region figure. Write 0 for no change - # x.log.scale: Log scale for the x-axis? Either TRUE or FALSE - # x.categ: character vector representing the classes (levels()) to specify when the x-axis is qualititative(stripchart, boxplot) - # x.categ.pos: position of the classes names (numeric vector of identical length than x.categ). If left NULL, this will be 1:length(levels()) - # x.lab: label of the x-axis. If x.side == 0 and x.lab != "", then x.lab is printed - # x.axis.magnific: increase or decrease the value to increase or decrease the size of the x axis numbers. Also control the size of displayed categories - # x.label.magnific: increase or decrease the value to increase or decrease the size of the x axis legend - # x.dist.legend: increase the number to move x-axis legends away in inches (first number of mgp argument of par() but in inches) - # x.nb.inter.tick: number of secondary ticks between main ticks on x-axis (only if not log scale). 0 means no secondary ticks - # y.side: axis at the left (2) or right (4) of the region figure. Write 0 for no change - # y.log.scale: Log scale for the y-axis? Either TRUE or FALSE - # y.categ: classes (levels()) to specify when the y-axis is qualititative(stripchart, boxplot) - # y.categ.pos: position of the classes names (numeric vector of identical length than y.categ). If left NULL, this will be 1:length(levels()) - # y.lab: label of the y-axis. If y.side == 0 and y.lab != "", then y.lab is printed - # y.axis.magnific: increase or decrease the value to increase or decrease the size of the y axis numbers. Also control the size of displayed categories - # y.label.magnific: increase or decrease the value to increase or decrease the size of the y axis legend - # y.dist.legend: increase the number to move y-axis legends away in inches (first number of mgp argument of par() but in inches) - # y.nb.inter.tick: number of secondary ticks between main ticks on y-axis (only if not log scale). 0 means non secondary ticks - # text.angle: angle of the text when axis is qualitative - # tick.length: length of the main ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc., 0 for no ticks) - # sec.tick.length: length of the secondary ticks (1 means complete the distance between the plot region and the axis numbers, 0.5 means half the length, etc., 0 for no ticks) - # bg.color: background color of the plot region. NULL for no color. BEWARE: cover/hide an existing plot ! - # grid.lwd: if non NULL, activate the grid line (specify the line width) - # grid.col: grid line color (only if grid.lwd non NULL) - # corner.text: text to add at the top right corner of the window - # magnific.corner.text: increase or decrease the size of the text - # par.reset: to reset all the graphics parameters. BEWARE: TRUE can generate display problems, mainly in graphic devices with multiple figure regions - # just.label.add: just add axis labels (legend)? Either TRUE or FALSE. If TRUE, at least (x.side == 0 & x.lab != "") or (y.side == 0 & y.lab != "") must be set to display the corresponding x.lab or y.lab - # custom.par: list that provides the parameters that reset all the graphics parameters. BEWARE: if NULL and par.reset == TRUE, the default par() parameters are used - # RETURN - # a list containing: - # $x.mid.left.fig.region: middle of the left margin of the figure region, in coordinates of the x-axis - # $x.left.fig.region: left side of the left margin, in coordinates of the x-axis - # $x.mid.right.fig.region: middle of the right margin of the figure region, in coordinates of the x-axis - # $x.right.fig.region: right side of the right margin, in coordinates of the x-axis - # $x.left.plot.region: left side of the plot region, in coordinates of the x-axis - # $x.right.plot.region: right side of the plot region, in coordinates of the x-axis - # $x.mid.plot.region: middle of the plot region, in coordinates of the x-axis - # $y.mid.bottom.fig.region: middle of the bottom margin of the figure region, in coordinates of the y-axis - # $y.bottom.fig.region: bottom of the bottom margin of the figure region, in coordinates of the y-axis - # $y.mid.top.fig.region: middle of the top margin of the figure region, in coordinates of the y-axis - # $y.top.fig.region: top of the top margin of the figure region, in coordinates of the y-axis - # $y.top.plot.region: top of the plot region, in coordinates of the y-axis - # $y.bottom.plot.region: bottom of the plot region, in coordinates of the y-axis - # $y.mid.plot.region: middle of the plot region, in coordinates of the y-axis - # $text: warning text - # EXAMPLES - # Example of log axis with log y-axis and unmodified x-axis: - # prior.par <- fun_graph_param_prior_plot(param.reinitial = TRUE, xlog.scale = FALSE, ylog.scale = TRUE, remove.label = TRUE, remove.x.axis = FALSE, remove.y.axis = TRUE, down.space = 1, left.space = 1, up.space = 1, right.space = 1, orient = 1, dist.legend = 0.5, tick.length = 0.5, box.type = "n", amplif.label = 1, amplif.axis = 1, display.extend = FALSE, return.par = TRUE) ; plot(1:100, log = "y") ; fun_feature_post_plot(y.side = 2, y.log.scale = prior.par$ylog, x.lab = "Values", y.lab = "TEST", y.axis.magnific = 1.25, y.label.magnific = 1.5, y.dist.legend = 0.7, just.label.add = ! prior.par$ann) - # Example of log axis with redrawn x-axis and y-axis: - # prior.par <- fun_graph_param_prior_plot(param.reinitial = TRUE) ; plot(1:100) ; fun_feature_post_plot(x.side = 1, x.lab = "Values", y.side = 2, y.lab = "TEST", y.axis.magnific = 1, y.label.magnific = 2, y.dist.legend = 0.6) - # DEBUGGING - # x.side = 0 ; x.log.scale = FALSE ; x.categ = NULL ; x.categ.pos = NULL ; x.lab = "" ; x.axis.magnific = 1.5 ; x.label.magnific = 1.5 ; x.dist.legend = 1 ; x.nb.inter.tick = 1 ; y.side = 0 ; y.log.scale = FALSE ; y.categ = NULL ; y.categ.pos = NULL ; y.lab = "" ; y.axis.magnific = 1.5 ; y.label.magnific = 1.5 ; y.dist.legend = 0.7 ; y.nb.inter.tick = 1 ; text.angle = 90 ; tick.length = 0.5 ; sec.tick.length = 0.3 ; bg.color = NULL ; grid.lwd = NULL ; grid.col = "white" ; corner.text = "" ; magnific.corner.text = 1 ; just.label.add = FALSE ; par.reset = FALSE ; custom.par = NULL # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - if(length(find("fun_open_window", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_open_window() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = x.side, options = c(0, 1, 3), length = 1) ; eval(ee) - tempo <- fun_param_check(data = x.log.scale, class = "logical", length = 1) ; eval(ee) - if( ! is.null(x.categ)){ - tempo <- fun_param_check(data = x.categ, class = "character", na.contain = TRUE) ; eval(ee) - } - if( ! is.null(x.categ.pos)){ - tempo <- fun_param_check(data = x.categ.pos, class = "numeric") ; eval(ee) - } - tempo <- fun_param_check(data = x.lab, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = x.axis.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = x.label.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = x.dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = x.nb.inter.tick, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) - tempo <- fun_param_check(data = y.side, options = c(0, 2, 4), length = 1) ; eval(ee) - tempo <- fun_param_check(data = y.log.scale, class = "logical", length = 1) ; eval(ee) - if( ! is.null(y.categ)){ - tempo <- fun_param_check(data = y.categ, class = "character", na.contain = TRUE) ; eval(ee) - } - if( ! is.null(y.categ.pos)){ - tempo <- fun_param_check(data = y.categ.pos, class = "numeric") ; eval(ee) - } - tempo <- fun_param_check(data = y.lab, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = y.axis.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = y.label.magnific, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = y.dist.legend, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = y.nb.inter.tick, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) - tempo <- fun_param_check(data = text.angle, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) - tempo <- fun_param_check(data = sec.tick.length, class = "numeric", length = 1, prop = TRUE) ; eval(ee) - if( ! is.null(bg.color)){ - tempo <- fun_param_check(data = bg.color, class = "character", length = 1) ; eval(ee) - if( ! (bg.color %in% colors() | grepl(pattern = "^#", bg.color))){ # check color - tempo.cat <- paste0("\n\n================\n\nERROR: bg.color ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # OR A COLOR NAME GIVEN BY colors()\n\n================\n\n") - stop(tempo.cat) - } - } - if( ! is.null(grid.lwd)){ - tempo <- fun_param_check(data = grid.lwd, class = "numeric", neg.values = FALSE) ; eval(ee) - } - if( ! is.null(grid.col)){ - tempo <- fun_param_check(data = grid.col, class = "character", length = 1) ; eval(ee) - if( ! (grid.col %in% colors() | grepl(pattern = "^#", grid.col))){ # check color - tempo.cat <- paste0("\n\n================\n\nERROR: grid.col ARGUMENT MUST BE A HEXADECIMAL COLOR VECTOR STARTING BY # OR A COLOR NAME GIVEN BY colors()\n\n================\n\n") - stop(tempo.cat) - } - } - tempo <- fun_param_check(data = corner.text, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = magnific.corner.text, class = "numeric", length = 1, neg.values = FALSE) ; eval(ee) - tempo <- fun_param_check(data = just.label.add, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = par.reset, class = "logical", length = 1) ; eval(ee) - if( ! is.null(custom.par)){ - tempo <- fun_param_check(data = custom.par, typeof = "list", length = 1) ; eval(ee) - } - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - # end argument checking - text <- NULL - par(tcl = -par()$mgp[2] * tick.length) - if(x.log.scale == TRUE){ - grid.coord.x <- c(10^par("usr")[1], 10^par("usr")[2]) - }else{ - grid.coord.x <- c(par("usr")[1], par("usr")[2]) - } - if(y.log.scale == TRUE){ - grid.coord.y <- c(10^par("usr")[3], 10^par("usr")[4]) - }else{ - grid.coord.y <- c(par("usr")[3], par("usr")[4]) - } - if( ! is.null(bg.color)){ - rect(grid.coord.x[1], grid.coord.y[1], grid.coord.x[2], grid.coord.y[2], col = bg.color, border = NA) - } - if( ! is.null(grid.lwd)){ - grid(nx = NA, ny = NULL, col = grid.col, lty = 1, lwd = grid.lwd) - } - if(x.log.scale == TRUE){ - x.mid.left.fig.region <- 10^(par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1] / 2) # in x coordinates, to position axis labeling at the bottom of the graph (according to x scale) - x.left.fig.region <- 10^(par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1]) # in x coordinates - x.mid.right.fig.region <- 10^(par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2]) / 2) # in x coordinates, to position axis labeling at the top of the graph (according to x scale) - x.right.fig.region <- 10^(par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2])) # in x coordinates - x.left.plot.region <- 10^par("usr")[1] # in x coordinates, left of the plot region (according to x scale) - x.right.plot.region <- 10^par("usr")[2] # in x coordinates, right of the plot region (according to x scale) - x.mid.plot.region <- 10^((par("usr")[2] + par("usr")[1]) / 2) # in x coordinates, right of the plot region (according to x scale) - }else{ - x.mid.left.fig.region <- (par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1] / 2) # in x coordinates, to position axis labeling at the bottom of the graph (according to x scale) - x.left.fig.region <- (par("usr")[1] - ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * par("plt")[1]) # in x coordinates - x.mid.right.fig.region <- (par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2]) / 2) # in x coordinates, to position axis labeling at the top of the graph (according to x scale) - x.right.fig.region <- (par("usr")[2] + ((par("usr")[2] - par("usr")[1]) / (par("plt")[2] - par("plt")[1])) * (1 - par("plt")[2])) # in x coordinates - x.left.plot.region <- par("usr")[1] # in x coordinates, left of the plot region (according to x scale) - x.right.plot.region <- par("usr")[2] # in x coordinates, right of the plot region (according to x scale) - x.mid.plot.region <- (par("usr")[2] + par("usr")[1]) / 2 # in x coordinates, right of the plot region (according to x scale) - } - if(y.log.scale == TRUE){ - y.mid.bottom.fig.region <- 10^(par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3] / 2) # in y coordinates, to position axis labeling at the bottom of the graph (according to y scale). Ex mid.bottom.space - y.bottom.fig.region <- 10^(par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3]) # in y coordinates - y.mid.top.fig.region <- 10^(par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4]) / 2) # in y coordinates, to position axis labeling at the top of the graph (according to y scale). Ex mid.top.space - y.top.fig.region <- 10^(par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4])) # in y coordinates - y.top.plot.region <- 10^par("usr")[4] # in y coordinates, top of the plot region (according to y scale) - y.bottom.plot.region <- 10^par("usr")[3] # in y coordinates, bottom of the plot region (according to y scale) - y.mid.plot.region <- (par("usr")[3] + par("usr")[4]) / 2 # in x coordinates, right of the plot region (according to x scale) - }else{ - y.mid.bottom.fig.region <- (par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3] / 2) # in y coordinates, to position axis labeling at the bottom of the graph (according to y scale). Ex mid.bottom.space - y.bottom.fig.region <- (par("usr")[3] - ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * par("plt")[3]) # in y coordinates - y.mid.top.fig.region <- (par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4]) / 2) # in y coordinates, to position axis labeling at the top of the graph (according to y scale). Ex mid.top.space - y.top.fig.region <- (par("usr")[4] + ((par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3])) * (1 - par("plt")[4])) # in y coordinates - y.top.plot.region <- par("usr")[4] # in y coordinates, top of the plot region (according to y scale) - y.bottom.plot.region <- par("usr")[3] # in y coordinates, bottom of the plot region (according to y scale) - y.mid.plot.region <- 10^((par("usr")[3] + par("usr")[4]) / 2) # in x coordinates, right of the plot region (according to x scale) - } - if(x.side == 1 | x.side == 3){ - par(xpd=FALSE, xaxt="s") - if(is.null(x.categ) & x.log.scale == TRUE){ - if(any(par()$xaxp[1:2] == 0)){ - if(par()$xaxp[1] == 0){ - par(xaxp = c(10^-30, par()$xaxp[2:3])) # because log10(par()$xaxp[1] == 0) == -Inf - } - if(par()$xaxp[2] == 0){ - par(xaxp = c(par()$xaxp[1], 10^-30, par()$xaxp[3])) # because log10(par()$xaxp[2] == 0) == -Inf - } - } - axis(side=x.side, at=c(10^par()$usr[1], 10^par()$usr[2]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line - mtext(side = x.side, text = x.lab, line = x.dist.legend / 0.2, las = 0, cex = x.label.magnific) - par(tcl = -par()$mgp[2] * sec.tick.length) # length of the secondary ticks are reduced - suppressWarnings(rug(10^outer(c((log10(par("xaxp")[1]) -1):log10(par("xaxp")[2])), log10(1:10), "+"), ticksize = NA, side = x.side)) # ticksize = NA to allow the use of par()$tcl value - par(tcl = -par()$mgp[2] * tick.length) # back to main ticks - axis(side = x.side, at = c(1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10), labels = expression(10^-15, 10^-14, 10^-13, 10^-12, 10^-11, 10^-10, 10^-9, 10^-8, 10^-7, 10^-6, 10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6, 10^7, 10^8, 10^9, 10^10), lwd = 0, lwd.ticks = 1, cex.axis = x.axis.magnific) - x.text <- 10^par("usr")[2] - }else if(is.null(x.categ) & x.log.scale == FALSE){ - axis(side=x.side, at=c(par()$usr[1], par()$usr[2]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line - axis(side=x.side, at=round(seq(par()$xaxp[1], par()$xaxp[2], length.out=par()$xaxp[3]+1), 2), cex.axis = x.axis.magnific) - mtext(side = x.side, text = x.lab, line = x.dist.legend / 0.2, las = 0, cex = x.label.magnific) - if(x.nb.inter.tick > 0){ - inter.tick.unit <- (par("xaxp")[2] - par("xaxp")[1]) / par("xaxp")[3] - par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced - suppressWarnings(rug(seq(par("xaxp")[1] - 10 * inter.tick.unit, par("xaxp")[2] + 10 * inter.tick.unit, by = inter.tick.unit / (1 + x.nb.inter.tick)), ticksize = NA, x.side)) # ticksize = NA to allow the use of par()$tcl value - par(tcl = -par()$mgp[2] * tick.length) # back to main ticks - } - x.text <- par("usr")[2] - }else if(( ! is.null(x.categ)) & x.log.scale == FALSE){ - if(is.null(x.categ.pos)){ - x.categ.pos <- 1:length(x.categ) - }else if(length(x.categ.pos) != length(x.categ)){ - stop("\n\nPROBLEM: x.categ.pos MUST BE THE SAME LENGTH AS x.categ\n\n") - } - par(xpd = TRUE) - if(x.side == 1){ - segments(x0 = x.left.plot.region, x1 = x.right.plot.region, y0 = y.bottom.plot.region, y1 = y.bottom.plot.region) # draw the line of the axis - text(x = x.categ.pos, y = y.mid.bottom.fig.region, labels = x.categ, srt = text.angle, cex = x.axis.magnific) - }else if(x.side == 3){ - segments(x0 = x.left.plot.region, x1 = x.right.plot.region, y0 = y.top.plot.region, y1 = y.top.plot.region) # draw the line of the axis - text(x = x.categ.pos, y = y.mid.top.fig.region, labels = x.categ, srt = text.angle, cex = x.axis.magnific) - }else{ - stop("\n\nARGUMENT x.side CAN ONLY BE 1 OR 3\n\n") - } - par(xpd = FALSE) - x.text <- par("usr")[2] - }else{ - stop("\n\nPROBLEM WITH THE x.side (", x.side ,") OR x.log.scale (", x.log.scale,") ARGUMENTS\n\n") - } - }else{ - x.text <- par("usr")[2] - } - if(y.side == 2 | y.side == 4){ - par(xpd=FALSE, yaxt="s") - if(is.null(y.categ) & y.log.scale == TRUE){ - if(any(par()$yaxp[1:2] == 0)){ - if(par()$yaxp[1] == 0){ - par(yaxp = c(10^-30, par()$yaxp[2:3])) # because log10(par()$yaxp[1] == 0) == -Inf - } - if(par()$yaxp[2] == 0){ - par(yaxp = c(par()$yaxp[1], 10^-30, par()$yaxp[3])) # because log10(par()$yaxp[2] == 0) == -Inf - } - } - axis(side=y.side, at=c(10^par()$usr[3], 10^par()$usr[4]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line - par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced - suppressWarnings(rug(10^outer(c((log10(par("yaxp")[1])-1):log10(par("yaxp")[2])), log10(1:10), "+"), ticksize = NA, side = y.side)) # ticksize = NA to allow the use of par()$tcl value - par(tcl = -par()$mgp[2] * tick.length) # back to main tick length - axis(side = y.side, at = c(1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10), labels = expression(10^-15, 10^-14, 10^-13, 10^-12, 10^-11, 10^-10, 10^-9, 10^-8, 10^-7, 10^-6, 10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0, 10^1, 10^2, 10^3, 10^4, 10^5, 10^6, 10^7, 10^8, 10^9, 10^10), lwd = 0, lwd.ticks = 1, cex.axis = y.axis.magnific) - y.text <- 10^(par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) - mtext(side = y.side, text = y.lab, line = y.dist.legend / 0.2, las = 0, cex = y.label.magnific) - }else if(is.null(y.categ) & y.log.scale == FALSE){ - axis(side=y.side, at=c(par()$usr[3], par()$usr[4]), labels=rep("", 2), lwd=1, lwd.ticks=0) # draw the axis line - axis(side=y.side, at=round(seq(par()$yaxp[1], par()$yaxp[2], length.out=par()$yaxp[3]+1), 2), cex.axis = y.axis.magnific) - mtext(side = y.side, text = y.lab, line = y.dist.legend / 0.2, las = 0, cex = y.label.magnific) - if(y.nb.inter.tick > 0){ - inter.tick.unit <- (par("yaxp")[2] - par("yaxp")[1]) / par("yaxp")[3] - par(tcl = -par()$mgp[2] * sec.tick.length) # length of the ticks are reduced - suppressWarnings(rug(seq(par("yaxp")[1] - 10 * inter.tick.unit, par("yaxp")[2] + 10 * inter.tick.unit, by = inter.tick.unit / (1 + y.nb.inter.tick)), ticksize = NA, side=y.side)) # ticksize = NA to allow the use of par()$tcl value - par(tcl = -par()$mgp[2] * tick.length) # back to main tick length - } - y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) - }else if(( ! is.null(y.categ)) & y.log.scale == FALSE){ - if(is.null(y.categ.pos)){ - y.categ.pos <- 1:length(y.categ) - }else if(length(y.categ.pos) != length(y.categ)){ - stop("\n\nPROBLEM: y.categ.pos MUST BE THE SAME LENGTH AS y.categ\n\n") - } - axis(side = y.side, at = y.categ.pos, labels = rep("", length(y.categ)), lwd=0, lwd.ticks=1) # draw the line of the axis - par(xpd = TRUE) - if(y.side == 2){ - text(x = x.mid.left.fig.region, y = y.categ.pos, labels = y.categ, srt = text.angle, cex = y.axis.magnific) - }else if(y.side == 4){ - text(x = x.mid.right.fig.region, y = y.categ.pos, labels = y.categ, srt = text.angle, cex = y.axis.magnific) - }else{ - stop("\n\nARGUMENT y.side CAN ONLY BE 2 OR 4\n\n") - } - par(xpd = FALSE) - y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) - }else{ - stop("\n\nPROBLEM WITH THE y.side (", y.side ,") OR y.log.scale (", y.log.scale,") ARGUMENTS\n\n") - } - }else{ - y.text <- (par("usr")[4] + (par("usr")[4] - par("usr")[3]) / (par("plt")[4] - par("plt")[3]) * (1 - par("plt")[4])) - } - par(xpd=NA) - text(x = x.mid.right.fig.region, y = y.text, corner.text, adj=c(1, 1.1), cex = magnific.corner.text) # text at the topright corner. Replace x.right.fig.region by x.text if text at the right edge of the plot region - if(just.label.add == TRUE & x.side == 0 & x.lab != ""){ - text(x = x.mid.plot.region, y = y.mid.bottom.fig.region, x.lab, adj=c(0.5, 0.5), cex = x.label.magnific) # x label - } - if(just.label.add == TRUE & y.side == 0 & y.lab != ""){ - text(x = y.mid.plot.region, y = x.mid.left.fig.region, y.lab, adj=c(0.5, 0.5), cex = y.label.magnific) # x label - } - par(xpd=FALSE) - if(par.reset == TRUE){ - tempo.par <- fun_open_window(pdf.disp = FALSE, return.output = TRUE) - invisible(dev.off()) # close the new window - if( ! is.null(custom.par)){ - if( ! names(custom.par) %in% names(tempo.par$ini.par)){ - tempo.cat <- paste0("\n\n================\n\nERROR: custom.par ARGUMENT SHOULD HAVE THE NAMES OF THE COMPARTMENT LIST COMING FROM THE par() LIST\n\n================\n\n") - stop(tempo.cat) - } - par(custom.par) - text <- c(text, "\nGRAPH PARAMETERS SET TO VALUES DEFINED BY custom.par ARGUMENT\n") - }else{ - par(tempo.par$ini.par) - text <- c(text, "\nGRAPH PARAMETERS RESET TO par() DEFAULT VALUES\n") - } - } - output <- list(x.mid.left.fig.region = x.mid.left.fig.region, x.left.fig.region = x.left.fig.region, x.mid.right.fig.region = x.mid.right.fig.region, x.right.fig.region = x.right.fig.region, x.left.plot.region = x.left.plot.region, x.right.plot.region = x.right.plot.region, x.mid.plot.region = x.mid.plot.region, y.mid.bottom.fig.region = y.mid.bottom.fig.region, y.bottom.fig.region = y.bottom.fig.region, y.mid.top.fig.region = y.mid.top.fig.region, y.top.fig.region = y.top.fig.region, y.top.plot.region = y.top.plot.region, y.bottom.plot.region = y.bottom.plot.region, y.mid.plot.region = y.mid.plot.region, text = text) - return(output) -} - - -######## fun_close_specif_window() #### Closing specific graphic windows - - -# Check OK: clear to go Apollo -fun_close_specif_window <- function(kind = "pdf", return.text = FALSE){ - # AIM: - # close only specific graphic windows (devices) - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS: - # kind: vector, among c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff"), indicating the kind of graphic windows (devices) to close. BEWARE: either "windows", "quartz", "x11" or "X11" means that all the X11 GUI graphics devices will be closed, whatever the OS used - # return.text: print text regarding the kind parameter and the devices that were finally closed? - # RETURN - # text regarding the kind parameter and the devices that were finally closed - # EXAMPLES - # windows() ; windows() ; pdf() ; dev.list() ; fun_close_specif_window(kind = c("pdf", "x11"), return.text = TRUE) ; dev.list() - # DEBUGGING - # kind = c("windows", "pdf") ; return.text = FALSE # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = kind, options = c("windows", "quartz", "x11", "X11", "pdf", "bmp", "png", "tiff")) ; eval(ee) - tempo <- fun_param_check(data = return.text, class = "logical", length = 1) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - # end argument checking - text <- paste0("THE REQUIRED KIND OF GRAPHIC DEVICES TO CLOSE ARE ", paste(kind, collapse = " ")) - if(Sys.info()["sysname"] == "Windows"){ # Note that .Platform$OS.type() only says "unix" for macOS and Linux and "Windows" for Windows - if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ - tempo <- kind %in% c("windows", "quartz", "x11", "X11") - kind[tempo] <- "windows" # # term are replaced by what is displayed when using a <- dev.list() ; names(a) - } - }else if(Sys.info()["sysname"] == "Linux"){ - if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ - tempo.device <- suppressWarnings(try(X11(), silent = TRUE))[] # open a X11 window to try to recover the X11 system used - if( ! is.null(tempo.device)){ - text <- paste0(text, "\nCANNOT CLOSE GUI GRAPHIC DEVICES AS REQUIRED BECAUSE THIS LINUX SYSTEM DOES NOT HAVE IT") - }else{ - tempo <- kind %in% c("windows", "quartz", "x11", "X11") - kind[tempo] <- names(dev.list()[length(dev.list())]) # # term are replaced by what is displayed when using a <- dev.list() ; names(a) - invisible(dev.off()) # close the X11 opened by tempo - } - } - }else{ # for macOS - if(any(kind %in% c("windows", "quartz", "x11", "X11"))){ - tempo <- kind %in% c("windows", "quartz", "x11", "X11") - kind[tempo] <- "quartz" # term are replaced by what is displayed when using a <- dev.list() ; names(a) - } - } - kind <- unique(kind) - if(length(dev.list()) != 0){ - for(i in length(names(dev.list())):1){ - if(names(dev.list())[i] %in% kind){ - text <- paste0(text, "\n", names(dev.list())[i], " DEVICE NUMBER ", dev.list()[i], " HAS BEEN CLOSED") - invisible(dev.off(dev.list()[i])) - } - } - } - if(return.text == TRUE){ - return(text) - } -} - - -################ Exporting results (text & tables) - - -######## fun_export_data() #### Print string or data object into output file - - -# Check OK: clear to go Apollo -fun_export_data <- function(data, output ="results.txt", path = "C:/Users/Gael/Desktop", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, sep = 2){ - # AIM: - # print a character string or a data object into an output file - # REQUIRED FUNCTIONS - # fun_param_check() - # ARGUMENTS - # data: object to print in the output file - # output: name of the output file - # path: location of the output file - # no.overwrite: (logical) if output file already exists, defines if the printing is appended (default TRUE) or if the output file content is erased before printing (FALSE) - # rownames.kept: (logical) defines whether row names have to be removed or not in small tables (less than length.rows rows) - # vector.cat (logical). If TRUE print a vector of length > 1 using cat() instead of capture.output(). Otherwise (default FALSE) the opposite - # sep: number of separating lines after printed data (must be integer) - # RETURN - # nothing - # EXAMPLES - # fun_export_data(data = 1:3, output = "results.txt", path = "C:/Users/Gael/Desktop", no.overwrite = TRUE, rownames.kept = FALSE, vector.cat = FALSE, sep = 2) - # DEBUGGING - # data = 1:3 ; output = "results.txt" ; path = "C:/Users/Gael/Desktop" ; no.overwrite = TRUE ; rownames.kept = FALSE ; vector.cat = FALSE ; sep = 2 # for function debugging - # required function checking - if(length(find("fun_param_check", mode = "function")) == 0){ - tempo.cat <- paste0("\n\n================\n\nERROR: REQUIRED fun_param_check() FUNCTION IS MISSING IN THE R ENVIRONMENT\n\n================\n\n") - stop(tempo.cat) - } - # end required function checking - # argument checking - arg.check <- NULL # for function debbuging - checked.arg.names <- NULL # for function debbuging - ee <- expression(arg.check <- c(arg.check, tempo$problem) , checked.arg.names <- c(checked.arg.names, tempo$param.name)) - tempo <- fun_param_check(data = output, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = path, class = "character", length = 1) ; eval(ee) - tempo <- fun_param_check(data = no.overwrite, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = rownames.kept, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = vector.cat, class = "logical", length = 1) ; eval(ee) - tempo <- fun_param_check(data = sep, typeof = "integer", length = 1, double.as.integer.allowed = TRUE) ; eval(ee) - if(any(arg.check) == TRUE){ - stop() - } - # source("C:/Users/Gael/Documents/Sources/debugging_tools_for_r_dev-v1.2/r_debugging_tools-v1.2.R") ; eval(parse(text = str_basic_arg_check_dev)) ; eval(parse(text = str_arg_check_with_fun_param_check_dev)) # activate this line and use the function to check arguments status and if they have been checked using fun_param_check() - # the 4 next lines are just to know how to detect a missing argument. Important here because if data is not provided, print the code of the data function - arg.user.list <- as.list(match.call(expand.dots=FALSE))[-1] # recover all the arguments provided by the function user (excluding the argument with defaults values not provided by the user. Thus, it is really the list indicated by the user) - default.arg.list <- formals(fun = sys.function(sys.parent())) # list of all the arguments of the function with their default values (not the values of the user !). It seems that ls() as first line of the function provide the names of the arguments (empty, called, etc., or not) - arg.without.default.value <- sapply(default.arg.list, is.symbol) & sapply(sapply(default.arg.list, as.character), identical, "") # logical to detect argument without default values (these are typeof "symbol" and class "name" and empty character - if( ! all(names(default.arg.list)[arg.without.default.value] %in% names(arg.user.list))){ # test that the arguments with no null values are provided by the user - tempo.cat <- paste0("\n\n================\n\nERROR: VALUE REQUIRED FOR THESE ARGUMENTS WITH NO DEFAULTS VALUES: ", paste(names(default.arg.list)[arg.without.default.value][ ! names(default.arg.list)[arg.without.default.value] %in% names(arg.user.list)], collapse = " "), "\n\n================\n\n") - stop(tempo.cat) - } - if(output == ""){ - tempo.cat <- paste0("\n\n================\n\nERROR: output ARGUMENT DOES NOT CORRESPOND TO A VALID CHARACTER STRING\n\n================\n\n") - stop(tempo.cat) - } - if(dir.exists(path) == FALSE){ - tempo.cat <- paste0("\n\n================\n\nERROR: path ARGUMENT DOES NOT CORRESPOND TO EXISTING DIRECTORY\n\n================\n\n") - stop(tempo.cat) - } - # end argument checking - if(all(class(data) %in% c("matrix", "data.frame", "table"))){ - if(rownames.kept == FALSE & all(class(data) == "data.frame") & nrow(data) != 0 & nrow(data) <= 4){ # for data frames with nrows <= 4 - rownames.output.tables <- "" - length.rows <- nrow(data) - for(i in 1:length.rows){ # replace the rownames of the first 4 rows by increasing number of spaces (beacause identical row names not allowed in data frames). This method cannot be extended to more rows as the printed data frame is shifted on the right because of "big empty rownames" - rownames.output.tables <- c(rownames.output.tables, paste0(rownames.output.tables[i]," ", collapse="")) - } - row.names(data) <- rownames.output.tables[1:length.rows] - }else if(rownames.kept == FALSE & all(class(data) %in% c("matrix", "table"))){ - rownames(data) <- rep("", nrow(data)) # identical row names allowed in matrices and tables - } - capture.output(data, file=paste0(path, "/", output), append = no.overwrite) - }else if(is.vector(data) & all(class(data) != "list") & (length(data) == 1 | vector.cat == TRUE)){ - cat(data, file= paste0(path, "/", output), append = no.overwrite) - }else{ # other (array, list, factor or vector with vector.cat = FALSE) - capture.output(data, file=paste0(path, "/", output), append = no.overwrite) - } - sep.final <- paste0(rep("\n", sep), collapse = "") - write(sep.final, file= paste0(path, "/", output), append = TRUE) # add a sep -} - - diff --git a/cute_little_functions.docx b/cute_little_functions.docx deleted file mode 100644 index a57aac26b02b771f4a8ebd7301151b5d757fab3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168264 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÷z_>~UVp9(pUM9#n2)!jom$+E2 zaE4>+uL(Gr`~%n;Ry48zeqR9URqZ5VNQ{DKmsn(O#tAbxj_w{dlb>&L5y;lE8KD9T zQQt{gtc8O$yGxI7jhD-^#AZDnD2YnUFk|QtLPDp6pyH*VVtP%_m0kuomKR`hHb~a< z2}tAo?MQq$^vTPcl|IDocmF_Uff2PliD`9kYy9wYsuLG`00c))#=%jT5Jd;z#dl5z z-wS0(BbIOeE+oT&T^PLWNd<U&%Wv}S!7RXwO^sH@S@8+kC{BEx%{3x}q`hb@r0Xay zsN4x&J2N_4nU&X;Agv|4HTrU6sJHW>8?9^vlt_lP)w6WBe4&%WhELSfI8J<FlD<0W zG4UVx)yG1=9OC__S%Eo<IkknEl`{-Y#_ztiha30Iv*w|<xYhIHz5<i+Lhv$ogY1lY zEAlxo02XGd=G5=H7z1tW9wu<U@-_v?MHx8HOh`U28E>k?adhL1l{BH;8AJ^8N}EXC zxbX@@Xfc?CE}3vJd}j<_BWiu%d(26tf=X=r{~--%&pO+svh{={S#2^yi(*o&VM{6y zD%{0l<|&earsi}X4wtLueb%03TZ=hHXFKIk(vB9+OlpwD{4+GrMg+vm!1zl}4vAHu ziDpq<(rS$u4y|TJNJNSx31wd3dg(m%rGT%a-fT&UcAkl?VXPdxudK!~FgU)tNorn{ z#w=ztBA1yrmEAomMgN2{r_cE4rKKmdGw5$4m$%em4%iYgywxW>%U|!&IX5(tS=dGR zcXMf-$#-}B<_8Z6#I7C?#7N`j?h*v0?BAVpsuhXE73Qn)4Q@qSe&WDneX0z)Yc+(1 zL1MgVB^Hugm3&*$(%me>XqwxOR*-vGVhP+VC+AT<2YAzX@3@GuVc3HcQwFZ!A-{(> zB2gpqk(h}KDO7LTDFuntMT9}3*VeH&oheb)!$BqLL-cCGXA<=Yj<)_hy}WqLlGrWP z`f!&fxZs4e&zEg&AG2(F9+ioXIaD^c&QibG7U)kt*&^WPblV02n%`JLsMdsLeAGg> z`Cv^@+=f8bj_tz+u=c|?c7YZMb-bRt`}l0&KEhs=de1A0P5+h+P!<bHW$}g1T<rmy z_2b`()sjb-{`b>_7cE!84I%|sf&@=Ah%ZZ#82wd;s|dV5HN!ktogClwr*$KTo(G#j zHO?dRhYPjqlVFSVfb-5sja(Lo_rctYI8pngt7|ESj0eQcXG_fxs5*BzVpR`Suwgrb zY3&=yL@)Dj4YgT{DPeOAzT|fD$dSER89zrLYjhoj@Ii#*Y4vK@)?M+*l;U<xD!nDo zLQ7W{VnsLIBnQ_3$6dUA%xgICu_u71&)#22N|=vTx3<Go?<#*-nq4h{uvVO`Ynm-E zuCYb87o8>IK*X@3Anl%=GLOC?Y1L9`so&vnGvDb%WkgbVP^Ty{>jaC9J|9QK9=6}& z1+a0kCFv7#X*!x@!bHm`kyfymOANlI{|oZQ5&c=XmnN0aGI`M*t64Z8GJ6#NT+2*b zjy96~yaP*S5*MTu8;)zn8SV<PZ%C-I8Qo5iPeAN<7oE3!nf>Y5kcQ4IA5Xy`V`W zeXbrUGq5BiIQY6tKAJSi$k`z|NWR{O4VCe$yYnN`N%7}6j@B!eF!4^AG-HAkUN;d( zJoLCe26&YW;jYrr8j14iTBRuJYbObADmIQS>!*dMWL^~${yRrXHWx};UaXSsab!4_ z1>6`}s2aa0wk(i;V{JODeZq0{f4`F<$TlSG0@lfe({bVdc|8QAp7#OF|K*_>3ojuy z|LWo%Y4M!k0Bll-^4oyMjeU=1K+N=_YlvC#t;&e<vg%2+GLL?=ecvUUmB}IEPWv#; zQrx8TizH+6+04f~icVQ?)>URG;}h;So6`A8J#VbOsxa_3cic}z7||r&h3i^rv6XKO z6=OfBT)_gBPaOSoL`t5s^w+4Nd5H@@M7L8vmJk-}!ze4tAeoR3U?k`=-7d}+iW8s9 z)6)~#qnFvEH{K-X%84C4=4h>2i#x;`r?roz#nD`jtfqF0zZD~izqyV-m>r`cD_!cw zv3|~|0Wp(EOQfHUEiWbMG&@y-0pqnhP}J2OK+8LqHU@jp(ukL#1}zX+zFEB8vStmF zN`QH9DK~%Vs5WXTU#T!^{Cq@0Meohh_}DIjR|R$_f^k|!M=!oKm!Ae58ewLxtytXn z(|xtSPFNxix^nZp^~oc>Rk$K0lv{R0?0S8QqPB3njrz04@1EjwfKX(J60CPTShQwM zNfH}qgArpTZ9@HDd4|i8-bZDz)Rx?cD*r}dVUl857^VyZ7VQOq&(9KwLD{nl(zNzP ztT}Vr_1a6!mOz=HmLXaz<RReRG{G{tn!G4hYd~iE%M`fw?yr~2;>5ltu<bqq2?>Vd zXBrgh=<Ntg#eU=o(#DDo=%-@PE;$#COZsBT&z%KrsHBfP({@2IWrk><YE|J-UBmPV zB+_^!6am3}IZ{N<QaGZl*uih4Vp9bk`~JMV^dE8BZjPOX8k=63E(CfllxA4_MDxV# zfXyXMuA@4SW5)Pzlj1PhFVy}6IQLB{nppB952!DRSK-_Af&l655<R(2?lz-v3i6Y{ zQF*N9NJuYe_v{D?bkdL$734ydc;iBZ>L_^fu$Ju!s<0{0IQ0n;C30YK^1c6{0XfAw z1^oz?VE15W&=DE=lcQR|g>L^|>5Pl}8Y6QO5)X4Mc4wiCC!l*nt?9SS^4`*}XArG& z)nr^`Y-m^*M%2<Vm6Y;dmDDf_`Wn(D@|BEyV<;|8FRrYt`lK<L2n@Dgh`H~*h%+NY zZM#mvHHLQfW~E__Jf|Wzh$<|c3ppG@xvAC&HX`%Jz`1pA9U&z|98qe8<UU-(b!Tsv z5R6K&H9vSgI}%_es{+f{gY|w<VinkQ7Y8P!rc+31-;QF#&O{kFE%Rs<Prz!T_nQ>; z=d`(quVVwS_3R1)RtKgM<Ru<nZVYR?Ws%Ve6EH5{wWIYMqp+yT8%TUOk8>noUfSIC z%4ijnB)W`pATycG$havCIzfejN;j=4^&evgX{Wu_9O2_EBo>o;O+QLs<q1_krgVF} zARP`GaFC$FAFTGAy3zl9xRSe`G?(Gf%YZDPne)no{yCslKBNW8J48XMq%w>{kXia$ z{8$C6s>SmR3X3<G7|w-}2LcKOXreV}JaRGtT39eg<Zdo`in3|&j%-~Mt0IL2sBGXc z1;{ximk*gRJP%Y@a;Y*#O$5_;9`ET6FAE8-z~hlRejkBp-*OPXr912=&NtrRG0j6$ ze;#r6Jo2rOW|cOG9YJeqCbhM}z+&&a;r0tXOxMC7{?UYu)%x4)>9^($z^P*b?fT_Q zR>D+|C*4EH>kGmFZP+D<IzTzx=SnP`E(hZCn_?D#R+Da^gsvFCb?xDx%mXzV>vlAi zUCHnq<HYK8X{Tc{pr;fuX9Hm+7oCY}++qqWcwY>G^4jG7*T_gW%G=WYRvaGB;9k#) zm7TVP-ogUQfC2|+#ChG@LSr*HTxNQIg4*}bz*@Y16mHdwc<AsFbb!(Vc^o2~F`V&h zTV2RVG`SL8jX#1<mk~_?Ep*1{0D0Afq&>DPywq4%*?lf0SP2vi0jBKA$54t0isw8h zb>R6!S$+1(#H%PdI+Q2!;{;+i9D(RlID!xJqt>|m-&YFCt2DjNL{L*pTwYX6<LLbD z0z+{{?#4bxh1_Rq`=wptzQ4Gx!H`tUPbH^yDy66`A0lF<i}%8X*7PMrvH}Pbmvo|| zNZ7)e_LhYP?a7JMTFo?ta4fH5&Q$xqU%)XV&o{W0$q8~A2Kg~A9F{_2NIjQA{3z9? zJ~<}Y=Vht_z8Rxrdp*zU0zJ4379up5Y|1iN4NUs6*l`7`om6l}x`59MigEfg48Stn zol9o$WeBv&3#c&U)hl(&3NTc8b=|89bpkjxDvxA$yY?d}d5ad^(An8hj)weoKSwo9 z<g}zIJBk@1!v2aj-Dn;W4Q)h#3?AFMmHI7}(cJA2l66WqFP<i>PDoxRBuhN0oKg;x z*p0I+r_3ugo<7ZsKqDrVMp6#D!rwRp26J5hkWstL<*vC=gff2}d-iJLj1}PzmKkln zLJ|FJPV@CyH$S5}$EZt^O2C&3G?h|KqUH^qB;}n|lbl#=9FDr_iF6!otx|%BPRL)a z`;P6X1J28@wnSF(Zkl0?m^(}71drJqZO>s+76>TxE0RP$Tt43_OiV@sr=E?qqUQd9 zY{e5MNyilKUGw@*-L`pbUNHmZX7iVA6LGNVlD#gVQ|&g8ve}7<XZzH@)g>|&{G)gT zD;vO!BluAhH72BG7^<W6F?g6Gi<RY5zb6e`D`E*^Wap#GL}VO;98#5xfOq$<<-RqB zkm8Z({~FKFMb7ryeI<w@7?R9MqPT(n#oL=Hd^EskisOiM{I`~&rQaAHsuaqo9!?oN z=P6Mk>N})13KEH<{YQctC@yqro~EYcVnoTh<;C@7`+Sr9=`OQfR+M2Y0vz*h4sVkj zRX9R<v=iD6-6e!dHwBpX?=0zy%ZJf=-8jj{h9NOJONH*7L|Se%Ug;lOP04GOL3H5) zmHF)E*3jtiY$IOX1iQi6c|B`8aa?TGn?uIC(526PWSMz%sb|As{1{Ui5~Pyf5Ycio z0=_CXfh+w=M|9T)<!%xv7imSmB*CKE-&&R$NbA9~ZcFw$SJn6>RdN9PK8C_@WRCG* z2=_)uIfc1QT**cuO7|C)#Sx+h_9i5ConhXGzn!=g>)Hc6(>Sg!_XB1jK+Ug#GKc-T zPZ+9F3NfgLRXeb>$gc^8OCmj;I=lJqy6xv1zN>r{{)U$!5imLMGjkItI_UwO5id|b zju=;46j387SVC$1l>|cEYINSBmcEW;4JW7OaYjh0xNO=RZV18&MRO@r1Ib(V%FWP# zM#(AwURfrt67m!_AwWFKt2t38wrlL3%vvdUSoq%{PoFgmVxVPP!2|IU#b&j_@EF%% z7B$AhXT$me9(Q#0GTa|$vt9g+v@IZV0A6Z~R1$fu`WOHodM-S~JH`E@rWoLBMG>}C zo#K2uNpGSY`OF9Hm(p4LvUT(cn4Nn=HZ{7Zeh%fPs1NJ6(Ef~&_tt#ye%q}J>`Qt* zJ-q&160Uv}u68EnB_^jaOA~f1k|u@-uyw4lxk0XFrs=}tp~snDa-vt@8YPM-VPpNy z(7jnVie#ZLJJG2j)KruzE?e7arS%Z~`1O?Eh4C&~!Q(1CAN~Lv0eQT^=xLDSY={6J zpaaWX!Az5NP;6E<fCtGIP<&AU{Z}suovd%<9K3wONH$_x!gQqeFJTr<_nL9sDc?F; z6%2I8$db5L*UxFhm%B@V1#uNZ#i#sjSfwWwHre-KE8_n#YLV7l6S&dRT8z{S2O?gT z@3j`b3Yc6YOqDzq3@%U!RKqffpyDd@(}!ox<X#yclmuCLKd3<bH4bTHfm{Xz*YAfL z;DIP?sos%xkSRP#)ozj{lv__P2LUT`esx)F601PxHS|Ci{~`~|Nz?_wwlj-XuC;S* zWnxd22~V!<&R$&oaK5s+ZxgyiF8?z?ti|bL<4GjweZB!XeDAI}8;wZ0&b0`*I)imk zqlO3jQ+du>SFYA}wSYuRIWw(+ZJK|R9Y1=o)?o2h>`cE-?tkva+7U0|Gkv0bWE?2s zxt^OixhkqhZF2Vc-Q`HhaE~dqRO2hdRR->B?vcLs9^#G_{6B@<zJQObk*RMYal{{f z9ET!Ad^8basu6JEb?ZivZBse%Ju3LfExx_{VH&8l023lL;BHssNfFdW|IJV`<3i~; zcl&MF0`nN@@2?}ra>9AyA*y8e*qKw*Vk-uZvjS4^py|QvN5;b=&Vygm?u!TJC#qgl z>>it`u4-6^NfpJm+t_BMx~&bq+dg&R@MHsTn={UF@vxI-vD{#UW=ePsv~U>9*C@2p z@xOA%+XT~tgw)hzb)&-ECOHtU`~cQd?Vu4z#jxOy$T4Wu;D!gq0u781F&*z%Vwk%e zSus`(=9`JGc36-!@}Ejf_n%5kt=guFv5fIKVPsK+XQ23qiNR{7WILN3Y+S6sxAJ@B zqf4-tXN@qqX|Fn3SdBHRJ-D{!#jTyt>*BUTP*V~LYvW<?PXxrDTWs^0Zp50N3(c0{ zb2>WAZ2ed9>W~{RYd<%~F*kF_Kva^Pw1Vv)Il60z^f$|A)5IB}XcB0-ccUX^KWU^) z8hlQ~f<XF^OyHmxcc3n-bs+hwb)>Tltz&Qoaoo7oU3gP4%LMW}3}Mh8A>%(!tPL7q ziI|yGkR-r9{i=M!EDVo8!N#MVj%G8<nC~N8nOx5tx#L=}^UIArWu*%vSM`*|XM;K7 z3t4c><oBHCYV1?LBQMUwI;G9UCOYV^tcGc<CA_3gCNS@1(d4HHnH2kOeAwm2n@gjV z1Vg7mE*7BuIAhc7^CW@OtAU&^fv_3sUYd8IV8YZd41y%F;=bNL2HjbkVrS(c%nAAP zveha;DLM7HhWU1!D*iH&wNt}q1*p7?-pmTb$jwNkTeJ8V;)%>++_526@$h7~`$gil zxbPY8IgI57KOZ$2Dc)SOV%MrGPOCq{ik=TVs7ABx11UYL(!AfDUV3{gRZCKE)n-mG zA543`*{lZL>2ft}f~!$0UN<`Ce_a^0Ed;PV*=<JfZMD29tP+#cO#=k0zbjN;BhV|% z!Q~v(c;Jj%4Ll*O-xMzN*w?7>Cc`Ql32k@Frty>A*r;zNg#HO}{g#&(Vw>vpHUidH zLJai^=yl}Rh|gULnw&(+UA8k8F;Xvs9DB6!N`r>qyBi{8A>u_Ap#<4zfUr5OZiwz1 zGTE&~7I05<x-V4)Us|Gf4>Sll#nZ#ZK;{n<&@JI8jNS{Bg)&T!W%NJJCJR0f=k#w1 zV{S99Rt)RGW4>2uI}7L%0g0vzh!T;X0SH$1(wH&qmSqRCSWS?_mmQOf_L^ZOz*1N4 z_#tOg9_qQe9AXg(0gs=9Cc<W?tDS@3pQ;uVpQk^ak3E7t>tQa$UKHVT!KpQo2pX<t zXj04|?osM1X+mT%ntf8AD1nkk3+izgc;Jrh(m6x$A}N5(vTykvKPPetzW4%xYu|QG zhQ{?l>Bn)@a<mo}6PSmC`;EQR4J#K0=N3TojT6zqhxM^~V%yF;NhEO&T^`4b6$9;S z*eVfA2q~^N*HObIRj8TTsu0Hj$AK|T39_5YqWC&7;J=cXDHDHL(48PQP?lW8aZPPv z;F1}+hAd-8MmbE^?|CMj4WcLK-6IqB0^DA1XbtT|y3CWJXWkfNbQlwNaXeHf`P8d$ zvClQ=PG+_4kX>@s2!seei@wh$N0FP$GO8FF5(mCa`!E_KdYWU71)U&UGz0Mitnv9P z_&1csR;lH47@f`f38#ZrR_QJdPA_d(`9t!!^*K1I-SRC!T6(4tS~OXf*l+v*l)FXi z<}`9Hw1RY@wl_~a;yL_<^$85TF>R;2b*?xL$wop_h2krcXq>NIa8@>q<DnAh;U=*J z!OwMD>sNJZ6^DsPPYCiLlhWA6obdI#^OZ<b0BkluwK4A-ne-M#Gi7G7ogF7Px8L{I z;JDWjl<DY>C9T+zeX`qvxgbg?n0t}SGiYs<wMBbe=!Euv_2D%9>-Z3dnfOuK{d7{n zr4qT<ekrne1s(o{(qP`Pgnc=^pU?_Y)9U)Gck=AA)rAfnoge>aBbzOr1C2xFI|VE_ zQ0p-?_~FScZ=M*Q$M3(|Mqc4+er6AId@}v6uIxCUBdN_$D$TvNR>Z1WPZ^){QE?>C zq|a!b(xT1j`(bF6j0H0ij)&LGedQH9x)>2;sB+{w>9?wd|0MC-LE{ZV9)XyS-k6RO zhtU)=@z>p+OJy+D^X0Q3|JWxXpyT!oSKzf2=`0c7fvxaiAV>Nr2)yN!JOxQ`3H^ZO zy1JficjSrsU>ypoi6=7!emYm<#}hv3DfwW5!5o}B0CF1#{6E|__FKHk_QsRU4}@>s z51+nodS3x6cK2BRhI6uu312U}(q;~M%8BK*qLpo5H(#a}K24u&bL^wPE)&e`!|(k` z$zK1f=$DZ-lG~`d*RV=kw|XsY<TwRXA#hq<_u@}6jA$IV&z;e7Ml^<g1b5U!Bu~?> zOuM;l@O&z*Osn@1nC6NMxq^HfvOBOR7wc42gt?H7mg(HDMKr_#u<*LL5cBQNr@a6f zJ=kxk^ep{ZKc99z1XE#rDW)OLZ^AN1D;ZZ+BVF`@t>BEe+86n4ZqX5#>m_P^IOXBf zC9xD<L479+U<EK2QqCZ$u)~5k?GMhUolp8X*d+ShtP%RkV87#hL$}Qn@DljAjQ8#_ zsn!iRDCV?kvUQdeG<qFY(+6EO049MX{)JnY!EetlbTW(dQA*MK|0nS$?TqF6-@am( zmSRkiCwDW|sW1>`$zy^WL)H3`Oul6IZrwaWrZ^KM|Dm~*JpE}`A%9vT_vG>muGA~t zpWd`{pO%_hSfBIVX-A+ga1MbG<cm|LI^=)*RmfEB0W;|uMZ6!0Ups+~-~YJzCb(o> z!Bkdzwh|(2q<+ocv((Ix#FUsU6nah6&+z!Ha}{@mp$|)d<8>k!9>dkfR;#yt+m6<Z zDl<r9(-Aq&MBomK5{#DPyE?sq_mW6K=6@Q`i+xG?lMEQQ%Vb76T~W9D?quWQsJG{6 z2ceVe?Va4Uf~R*@Z}kLBrCs31mZ8YV<gc^OMIM<CqgAnkyOTS?35Ya_+Omx*Ao$@^ z*XPy*nM<)w#A^AIQuCGhv2*RbH}eC;@3n@|&&D1X-fKS`&AibS&F|9#i3BHq9kSfE z{3NpkMvue_aC@@A9s#3+gWt0g@z!hBDmDd`D=jqLHIZ&A_Ma-dm}VfjKNY5XzY;)A z<`O0i4de3~3*#U0l1fBJg@MtxxT2iLE?U7Av#etO;c~$hM!^*!<eP$xqCG<iOa=Qh zxM4>77e$jU{WGn`E=ki?rX3DN6P*|qrJ;WZj)f2)D);bhxd0;u3;GX7=DUmTfht6O zUTjOqN}`KDa%vw)e-wdn5_DzVvgEmOz*(0Pmsy2HgFnt9;aGr8!oL0pb195*5tsQ5 z_E9zXwP&qkveNt;19{g`eCH{{R5gnY+B$~xmd8rJ(PS5T>Po0g_#v-WbmF1Nm5Y#x zHv-4y35Fp8%8dxa?j*f7y>Jm~b;gq}>Q1Jn-8O}{<b5|eD}`gNs)%XN4+zyq71Bp+ zMsTUEyUQNyCdbK%a%a5?D(fLvp$M$iv^6mt2X0PEuZ>7|(v}0$C(QG%_sKBvmi>9m z?i#&J;Tw)px2TFfYK8O@f?1A44>@TbsGHIauVFKRU>oPMWOuE!7+rg6dh$mm<v;Mf zBC>(xKbnZ5h;$}S`!p$bY}Zket%~7XsCDeXBeK6ivo+$rE~(Howu3fereJU$re-M{ zJQFfo*T)jbwnD*Q{Gc@;jGsX*GuO44LUg4WG{_RwrSIMQt-MPR6n*BU&Ghg|Fds#k zNFv%hNcwmK87$!al8hTAhGH-s{^lkWZ#q+{k6rc4lb+d3G&JOo@ow=Wmds4zNG`~h zwkr)!JaZ=&*G3gnSm8>p$fiAk^#k`kOou4#f4>&}d!iBaI4JNgTuB((cCMF4;w5{g zL-F#mYFI0c)RjDzP4l>(VDciY47DP#2eOxB-!?IfQ|7M-C!RoD`MDSby*n{eAC_(Q zHmC5IYnO!0j<qCf)GFW}mQ6mHLqJM^Aqeoy@O>n6NQ@Je+`T?Q5LrIJ6y4zbe+5jv zGekgDjlpvJf9;x;rp*(tU=&M5b;nyA3w$=-<XBlc$_?dMh%*h$_kZNyiaG|uL*da@ zzVtkDU~upsj*zAR|9{S_tFdBSvt_^Vbfk5ab~Rtm>g~$2twF)DAt(lZByz5!>1tJ* z?s7vvUBr{s2DIW7J=&+u#ZX{!^X9?J9-7)KTbPmlPK%2#cf;Bj@@nTZL*^jtiZwFl z9=MJB&&=`vCQ?eGIY%Ce$O2!68@1jJgl4&yfkVyRG<fZepzh~8?*wZ7dKyAAyWh6I zoeb~a|0`4R3D~Ju<-uE2^0N&-55axchtzHkf4L@g2v9!@qs2%~^Kl@vJ9MpDz2i!0 z$^k1{=y{`sx3EKpuTU>)z@ZWSf&ntFSKw~hkM%Fpn4e;z1XctooIwl~vVGUvC18j6 z8k}-5TZw4XGGw_|=8&wkcftcWm24CJ$|S##M&%i`<w*$_*#>paDn3DW7`~w7h;2;d z$&2-+6x^b-o@YWV!=5Zx89fF+_EaHQqyiEwdi)k?mbA%*B+HAwfjBBRh2{0Tz`R%| ziKK)c?()ZJg2Bvh|J|Q-Q~UZQTj|G)HrRC>buE9AbuCW#3!bfo|7muF@T=Yw{@vW? z!hQ3bwShlQw4p*sSRd|_3Ld>p-61YuK><?q<VhW5!%{-ZvWyJ}@&n|^KIQ!v_(T|X zkHnE`jff+`YBhbJbR+ok#&ae{2YOkC24jR!dkJQ%kV${A!gb+22071Uc{tig$kYy8 z*IztI=7v&qfHJ`hxLnF$232||LI0-Jd$2@>zFNgNosysveBdoO=wS#%oPxOWG`=!^ zjiF21AxeTYX@v`nZHcxdi)Dqj5lc~P)jz~Tv;<`^yFLVR+fQo9pD~r=#oBQO;$EnQ z?y#7g91v@<aRyK5UWsUa@A5w?A`g+4HSu1t0%Ls4UUPKq;)eu#_HhOZd3c@Q-|O#h zS4}CjJL=`aC0>_5r;agVg*i>@VjVcIkjg;-Se(?~Xc@3gwDIGyB!?)r7H=HCbAAlX z`c5~W-zlVZaEUSz=gr)Z(#&ehUvF2lATJUh2Ad=Y1b<q+hK{8(o91iqnrzR{eiKZW z>wBCaM|-K%c@>}DaeXmfCpg5NFWc4z=)P-olDKh~A=ja)@`=tEoP#%wZOxl88murx zKPB2hiSXsC+KK$`g67+hwq%^pj>43*mpY9}RI@4#PffX<%Q^!KyM_}B76SJ7P6hB2 z!e_eUZca6{nqG68(>iLd46zH|Jlmp8HPZWV!h@;y(<|^<(`0s{kG+MYrTgpyP$wP6 zkEToIAwX=F;d<ccP_GjD|9x{7?{Sg(S7S(O0QUp^V+a%`K)G4neI~3Pe_TBTyk0=a zBm@4)fS?Yijih5K_A?cdvMSm(nE%Ov&z_?UHX(*tbJYHD5E84!tXf?csbzlLqOO_7 zkoQv&j)4M*w#lWT4^e+4K?d9<rrPaT^?thkcGlE^9$zd-F1t~dD&sTM8kd}}IT}|? zlB=RWhpU7u0&WkQt^!6m@27L1gC*^}V>-@|%B=HjR`}bW1O7ARc}oX_c3HJ-Z29PM z=L7|}9L4t$#SWlVirwJhfa6=m@>J`>LX+~WilU5X?ha@Zc+0KUu^El;#{)M;K)vw% zJV<NefSeubI456GJ^ZIvuW(4b0-nrRU$Z2P2`@#DL1rh(-~GEGO9L~;WxDcCwrcWG zwx!ggJr*3MCBh|Q6Z}uHb}+w8RpsSY19G7C%_gmpu79p<Rb^N6zP-CKXWdr96`-hg zCCKL(u;NxRHZ2KDc5}<XKBj4cTXx4-7RJPItjz5nmW#V#t5K%JkoXD_0&+(*@JI0b zX8+@KgP)6!EM=|(7l6K)rR=zD3m!&7(}Zy2V=wefu6D}P+ej_Lt{$CDKN2NKvkDBo z3;jZL3W2%8`1k=tkS~jGwaa?LTdIf(PBCC{2mcIBP7OQ4A*P+Y<squ7co4H!ah&fK z?fPo%yt!%%hoDi7j{z}a5uRureyGw~#g1kNLhUEQ`d%6LS7Ef<vw6AJAOfu#I`G?O zQ4k$EhXD4LwWVb7Znpar<Vj1K?(Hpe@x<Rh2ZvvaKVKCf-&b1-(Jl5z?H@u1wH?sp z5M!bdmJ8}&esn$Vsq&LZF_st~!Jxkf%ZN0SUL@Y_;l#iYqpPrXK8un*&LB{VA#rv> z!ck{GrnC{34o^B3#9KX2KlG$Ame8N%DRI5qXFVz-tf$2J(IG~Km&>;@Skytvr*)G; zNbX&hcut`lq2(Oitx9Ja$l{e$1Y*{I&-g}=Km~qyVZA+M(rdtlIFZvd%Kt)K$vic~ zOdMvA(e!9Hdavt#!}5R=FINB3OqFk-vPS8POcZ4I5Wc=FU@IaikGKdS^=^W$$;Ov- zbo<S)%S0wTIsER%*yRZ(8aXqEgGmiig5J9eQ~a;2wj47YC)t2K=gk%Aqw}a!Bc<i# z@f41*AUej(h{2Y=fcwu30i;P=X=tRdt+o1)_b;vN5A7#a2NOIi+qU|yZlr}>u3a%? zjIm%`^@n9<+bV2Zle=;YdM^rMHGEg+q(UNaBiaurL}M&i_GpLw*)4G4kHl3##4|jv z=dcky2m}feF}hz(q~$NakbqzR2gX1-zk=L6Kwu=k>=JLrphhuX`RWxFB*!INx%Q18 zw-wd-1$W>ZjbE(Bx7?qH&gc;1Uo0M6{JfC*@d>W^(M-7Sc{AU!eR63(Rane7kH~Ma zX+Pt<73{q6j><TGhm=kvyq|Ycr*5=)vD#d==pu$_@Vmk9qe0eF!Hs0UzGN%Xo{Zn? z`v$+4x~jwAcZs~ak(x31T_Sn;A~k^D#j)qIf`=hW>Y?ZIO@Q`)E4Dho*#Bbfe@xGp z``qiS;~wbger2_6`4qHe{lZwHSFEBp1F#AX)VxO8#l%{T+HM}VSado2c{o{@_2#a& zvwmSz+iz%jF{V^#)daEJ5vjl0K?_E$7p>L{1>!}LH)~<ZUAprCWuk8a#oOJ<z6s0~ zyS#4#50Wu`6P4Ntv#7fffTEEHJauA|z6m<PkM=^)@foJSq3l^InQKID^2PlPj90K{ zf$@*&iYfUtaj6ttXdKgrup?tr<R%nOeA9=pD>HKv`Vi&{z+^j0uJvWCAUbnR9aGs6 z;%fxNO&+t@fOwK*E7u}*Omm%Y>X=Gh^}zGnKyK5Aup2`W3r=sFK7@kvAn`tgxesUX z`wroE5$iMfz1;YH<!Qe5IIvBHVyO|FjN*mNE7y{dz3EUWxh*irUK0D=NDvoWxN4An z@yK53P?*PPk~$O?px@YkNfDH<ZzZPZO@~6{)RXejyjVqFWUXV?rGr}5I=)6i#&jqY zn~>QtwXIzZbJi~`btnkjW;zshtA6+8R+}BAeSUP@IDU`n$q$^-;M~5qX5%nES>&s9 z3A-(M=cNOEFi-8VeGk7<q$$r@f^;<H$%i9|UWSn~5eGnU7w#8gjmJy+&<}{x;R4(s zI6`3)ZTf7N><!GnoxvW^5GL>C!b$4Mo^SGXI&teYcPnewmyCzZGZWi#12{*+3Ky+! zi{2P&UgnYD#q|S%zXyjbu;1hjHNTt^%oNdILIVZQ^Gk>1`f(P(0lXe@ZF@vQk2vmd zJR8|~ga;h(F?_U#-|^4}g+EbTsTLAkDrqNiNnu=ZaTEPkl9-g(3T1z^5o|0WouAdA z2yzXNzG4hFAFCnGd{G{R!&{$uP=F|Wkn!u1Z{!csZ{!cIF|<RWgdopGoLY_wII$JV z{%FLhg8L4Ko*TmHLz`4VDSIF`W+NUchf^-LLfIdEcx1<5dyWw}-5KE(swv8$0rU~} zIc|v<gyNGbMY`%a%Dg_Lf4QFD#J1OJM-2?=nDOhCGLBz2<Sn>3!kdNDnSk$OCkUB8 zIfU}a0M3qNaS;3gn%Ma@`d>IP5)LIjq+yl$#{<HChJX2e9wp&l#C|#;^Q+>55^mvt zlm%1Z&$17v{Db_(cr2>?)$lX_a(0J)J-xX21Jdu%Z>G1!C-^q;5zd@noHcPO{UE&n z9Vj8a0RF7ruFLNSx51s3GFbDkg+I!F5C6RUwc=;>_WW!4ZTQ-S1@`X#Vh=<3!_iCf zL&9&9pW@ewJ-AaZiT`khlT#o@M~9JV5L#DX7z3id9nO4rPYF8ac5rgm2niR!RF*F9 zA16Su@`dB`w82a2W@#y2S;OIrUZdBnRnQ+uNKBT1x`_#oqmyd2O3zt}=5EzHG<VA{ zm0^o+u9ECa;udxL$7g4?d3u{g32Xg&<2`kdqWjjrsGprvRe*QszVUC6_HB9<{v6w& zE@+YewG;Ywy~^K+bKjlkeV<tV_p8wILwM2|omMEJaP-Y-<@VYeHtR=6_2c8#5t}kb z=NQABN&Y`_KXY#pY2HRvID8v@Ys`2_?-q83-ej8cVLl`@QoE??6)+;nNz}c4f-ku= z1sZ*^<Zr>ZwR|V=T;ko6@X3pPAMSYA!97rOe@|_(yM0=G!1k5_j(Acq!T^$2t=?He zYq`EbD>bsdjF>HYmW#L=>9(3@M|0hx<Gz7s<oQCARjX&!CRJoOi%ML5K^c{*KqO!y zbe6JjDBsynD^{>{p36h!^oI1XJb`@qm#E?`!Q$Ew%djmUOEMlj(w%zav8OCEjltDK zD6+1pS<3sZi^lPJodVUId4DYlR;>oIIN}h6>L9d2oYB&A#8d#kXS5&$6ww9g^Y*uh zn|K`okY*S<p3BB&LRirXt$LdB6BYT$HJ|F86qu;Uz*LSxnhyhH{ld)TbU%J>D-4{s z9xgIjnDv&ujv~%_6+rl8FX|0M;?a+SYRLo-sxUpB!+H}PKX%v;KlA4TimC!wq7@7s z=Tu4b!PUpE8^o^;1NA`#Ejsk4jLgg-hlY4igl|th2m?4Su?U(U;(*8dXu|;#sImha zmhou)uv1928lR9gw|Xaq<}R|DHEaHmq*^1*ttjmXjOuk;y^~%}xG?MOU#gB0V>sF4 z+#J@^!Q3Yq+wMd7sL&~I<7&ikMJ_)FLNBwU3ehzeP7DQ4JU6-|ZB%74jbh40Yj{Iv z;42g|n&ts0N^>f<`&Nxa=xFehxp;Nnq#Q7Ssh@JmEAz9$3AAyj>8QNL)<jr}1qcw- zAN2qA=HsA$PA+aPd)FVoTwWEbs7n%W(FSe+#a+*}i=}aa71~*&XdR6)(6~GJaPzr; zd2NJwYetr3&6!IB6K`mwt=29VCW)o8a>pXADy^j|qOT-t-q2BNEps7grq3|5GOos? zF5CWgr$i7~U*8Naiv?OnWnqO{afz=tBFTk~GM0n0U{WNuROyuyTk0K?*or4LUpv+L zhWr!l98=_43Zb*Azg#PyvIYxSX_1f&f<<ZL)h1(yHW_;l&d?ekk}gyYl#FEVY;tG& zSWs?{Z5pauwD(1qstqAK|3`WCyfMB>NERM%{3nILMsvQhL0hIdOGc%+vW%`v8_k$Z zsFE4A<V7y*n@dZ{w54H3DuUaiLn1vWjq{(Jz)sNutU3qAZO|T{3SR=tBg&0cxdfAV zA&CB7#sYN{176q2wus6mO+9B2Vr}hFvbkmI2>(UrGP*d;$tAEvbXmINK<q15tL&lf zem?Gp7_`AA4{YD@b$LYd5_FR0V#`Kkl}u<4Bfu}ZJk4qL5hv=~5O@XRi5R6pfMSk` zAnqnj<0gDreE71A*&ozHQRSmKAfh7^+XMzDI@mT2gAQF*7Ii>J@BmbbE?5YprhW(q zw$W8-PR5c^X}QA{#8#>e<vI&Dg9}+*;X;$dD_5@%loyw>2BM@^u%2KAVLC7m7$}k| zWn*(6caw+TEA=f!*QJd%O*RoR>!3GUNnRuhV5#h2P2oag2g_#%`RI0q&PI!Za@x|e zmU%&-BZ5=QNT;V8n5<Ya02f`S<_2-$b3_*=EMwUaj98bRjM-5e$xD#-H_84rlKt9f zooAigvZ)tsD3fgB){pm=jgZDpcr)LD&WKC9*z8a;V@gFBCOX=~8J2YFk(jg|IhH~D zNl0)aS~#%X5#+r`U#$oG%(t!Ybk-(LP+uK4Et@7Pfk`pJQ#`o9n3OFyDJIZZc3)&3 z?>J<KIY#;g*u_8s8?od3^cLb|aP=LJEP_lHTmC^T$R*ZXHp?p3rDrTCnU<_H5Q+sy zFz4M3VfJ7&vZoE6=<J)|P?;5SG6Ms=UubF0!VxviuX25*sO$N!8YQO15cOmph^McG zs@Bp3*}o6Rvk^?SiK=3;s!|!CWsB63bSr9MN=ZCgJQAg#K@7M938w^`LCeL)h9UOX z|BvqHub=v6BI_<9L+>uAk<*pXu6o|;!9mU1sH|iFgkxIwtaMA&+YWVV?Pk>8h!r7X zC<i?c$Q=;#Q~&z9Ke+l<YuA5+vlrpY#0q`q_q|&Ccz>V#3Jy(BhpUGAaFY5!N9uP{ z5?UP9zKZj6Jtj4ey7Aj(t6}cVakqKa?CPVL@kpd;bV=ISmCha-OK4C4m6BpAQlnaL z9G~FWS080hYNu82&|#|l(lStN#^)A2K9}PnYB!=BD@dwmj3EggXd{Ek*zQ2V0WUH8 zhJ=MzBPAGgq?oYZ#^lL0Vz1n-@IsTvJqw{9C6lM#p(amqLz3b^#^e=h@{$$n8w5KT zAE0&+9WG-F7X_TJES$+CJ0L?Klk688d$`>va=g&NH3m{&1F3p`&-jFVtgi71S-JdH zYFlF<;UreTdsZ-Xw(m@o=WU^|lg;*fh#yO_;{yUwbmNz7D`j66iaR<#YBrilp*Zyp z^-K7rWoow^M}`U)jm1Bj{n}CeLZ3KtGV+Zd>a9&!t8?BzyZP|p<K+j%zsh?shdJZ8 z*kX%ie2XVZK9_~pEq9f?)@Spu<q60N6{}^DUK*cNQB@_FoA4{0!->@b(Us{;$~EOs z;##qKBbwA&ys{sfkUohQzAR&4JxQ3%!Z9h;2kpHf_nwa#uOW^ACL{Z9_V5rbW={lv zY92)nAgOm!oX~2(-*$n&9fC&MNNTd?iGw2y6w%}0MXGF7p{brqSnIM8V>AQX|6x}; zJ83i{=MysdtM%*0C#|HIp!#?kOIpU5Am1NtR5diRSpLHd&zmO0M|%hz_-b=tBA%)@ zT4(jfoC_Fh9G}%r-uLDgr81U_Ub9(07I!FX@Nd9<N-AS{E!G%%V}O`^rctYURP9#9 zK~v(Ym~@ol=&289_{*?^v;!7*@+&)oy#V&eb0v7f{2LO$5S5|5bS?$D!V;BpZUWAG zxs_h~-3?fS;N1ty9=|*HhE!&PcguW6+BDFB4QLgSAjo_9SCrPVnV%xYQ7&5V2u<hy z^KIyP<KPyY>s$YJWdC>@<>?Zrs~@#P^%N6n3|6^B^&QfXM@ATB4LvCX=Ty#?x9U9{ zM8z>d>xxSX64PI7lLHAAj2qZ6c5-iO`GLI`+P{a-q#qIiYp(?euN3Av2>shTD{zLl z0OoHgjz>klyNuIOJIx}>zBI5jSw8k-;R>N1B%CHL?S#gN*SLt~<Bq&PX?A;s^n>PY zD=f&2{IEhB4r+x1F~*LIhqaE#EWj)FB6Sja%-Ns&{s9R>E1U)NaX4ujp8iQ5tsgeI zvu&3>Y~vR}c!2gCf#$U)Ow;VCvX&SyP=iBq0!F>FWnm*a==YAdC<lK9rcs6+rw9QQ zJODZC7e-Itx!)td0Au`I>gqEc(z<9IpVxEpcJo-+5QaOibZK)f9?D}yd$c5KpZvjb z|3E638mmMxKt7-_kHzfo|4n)MG>V0BV!hiuZYB1Rzg*iC*ic6|F<UJo%$%|>IkG?o zZ;vV`v?o*VaA<|(kK^#yg8bL4wjUOdjLXOrhRNI2y~>~6Kf9-q|KYX%VDM$oj-j_4 z>6M{vTe|G)KlRyB&7?c{aPzr;c}+gwTwRm1KIz8RDi{`VnRe>;)5oi8MP=ny-j^Y- zc9wBtbR~i`Md^}_cvDTipiZe23{#6X92;#{31DgvdQ%7mal?^<*j&8`wwCgh2`E9* zMX#K%%o=Lto|eq|g;ALQt|+H8$k33NrJi{PI=f(a9^~CEms1;j*C|^BfEFJrsw5IA zmehXs1q?YzPO{^{0|Lty$^hNTdE>m5R}?gdrFLSW4PnW(^c_sFCN}Ud0fzBQs4<gZ zSkag}gK&ogzXbml<zQv-_K3yinA-$v^7Z#K^zc>&YgXF{?ZW(tMqV4tm2A;XC=HI3 z%4UKJg(exPLK8}(LwgZ`sm6P=jBn9qJwrt+nRjhePUpp;v@D5TVCjF>UWr6(70YR7 zGhZHGW1!Wv2Sr;wR7TLPJt!G{#LKDj(QP@L4UoJbIN*C}CQ@N+ZPwXYqpK^T#o59e zN3}-s5HR)e-KpGCC7SO~K8%sIfkJmZuqO6l$y~g#?LLH$s~4pkp^`Nfi?NW)n@^vV z<)%r28G#0Qf{j{jqP4?nhWQQi_b?Ws)FzKDsMO}yZ1?Tb0uN)&PAfg=ZgtihP@ji| z#-mRa<t`;96&<b(=rFd7a~ETmteK`faR<Zt?I}w2RH)^IP^zK=#B;05o4Bh+znK*P zIpFa=wa4~-cv>m)@L<FGa9nQ89;06d4K|0)s9bu#bBF?Md=?bE3{p%>^}KGrZ7G8g z<+EL#!>I@7SkWFF6LJ81sd!kMbbku7t=MvH;JguEEs8;@_|}d18tV(FTf{vVP;+S# zK+F1BJR{rkLmXsSE(~pAC$AGbDHo<TGQCwHUIVP#`4rie8CV+`-Z~jJ=$Zy}O>B!- z6(G8HMu0(`p*24A?*3vA`3w^iKQZwW9yO3zWC(o>ID37A7@JA`=+)Ui*AG!Ybz9?q z@mVTt&KMk^1t&1p)lnNdwZL`Om@u}Hw3VZgrOX(c1>{Ro1GudUMJ+}H%(ODbbv?N0 zE2=V0xt|eJJjR4};~AEgYWs$PTJFc{QL?T|d5)zOc8*o|8SS&;h`}64)!}1P6{@6B zGKypgaWk4ncg@45PdUM%I~$Mpu&g8C9J0<x+D-VO4u`Gbv00B$%ng&bPb)CjmYqkn z{RwDOtd!}5f(*mu7^F%nRx)rgUTvGAt+A9ssvQO?FGDM^M1QbI?P+vP+Nhqjv7&(i zy2HZq7U*j$joTGBDkTsoR~eMzvFl@WlE96KH?SpXM<!YURZhhdU6o2H?T~d1+5~aD zMr`=AKJr74MJgFt)U<1waHWBu5eTZC(k$cb9<*&}3}VMKYolIPqR^6Qow+ecDE&yI zgA@QJ4C5w>saD3C3hgk$y7MCWLJcE`arO}lr5z)%Ajyulmgz>V7a1;X%yDO}f+1s= zpt1ric*%z2twhY_Zm7{s8!6K!<~TEopY>5gCg>12qk++@Mz3md=3wdp0$S=-(WqDw zy&4M^2@g_HH~QF$VuQIQiJ9m_-g(QH+7h~!qhf+(I<@=Fdx6zP&*CXxj$?K75&6H{ z<G}u#;=QDaj~nUMQo5B+|BLRYE7P$Cb8c%VtXU!LEP7p}du#>a0L~1ueS7rPda%!Y z+xku$lc2T#evkY@<_2F;01#c<)+HwNc=M_c8phZ^AkvTZeHE{6@w#HIrbYLBm!v3g zTlqFl-^7UTw!VH`?2=D&+1B@uZ$BGkVoYFUSa8`)VAy#DfNOMV!Hv;Imj;eHF970< zg^dvCFkM=BtiXs_u3{Fm`N?G%3<$)ICDjHAB(I9Gw7y=E?(l5gQ5PmIwY9E$9D|!` zOiPMBWp_@8c9~xmjM_^aWkUXFO{Tw+_&td3tTX3C$-Ihm>?UfXBrrs5g|a`|Sn+5) zQyGVIKxi{RwJFFoFHd){O;Jx0A8f=lCr8cFP0W#w@7w;lKR8{6`i;mNe6H<!;UGm~ zgcxna9AzA*q@7V(GjNnWH<VFTXvYmvRk2pI!|+Bai%ca8vH%)2HTRgNs3LpzFop!| z@nhG0)$r&RxVgqhp<w%!8G$z)O6tM@PLR)>PAk<8Vn7rGI7IPW$sZi|4;gu{d_OXA zPz)s90=p7dCkB)nZNi$EmK;?u_hRIO{dCE4#S;imkIwM%Ifbb#&%p3r5H-1JYkq{~ zP}~%KBE$xUn{3nn#;9)$XVv$kIIFfnmcZbwlFeo?IIDd}y9P3x?T>btw_EFNR+7ty z6r3e`niU|TRWCvmXC*33WqAf?8JtB~{8bpCB#q;GYsO9rz+F9W_1-ryHY*(g7r7{9 z($zck%oBbI-4Je29CrlYH@5FX=<F-w)J18@dX!nnNwF85Agt0`F1S(e7*1gG&_IkX z;Gkyo@U39z#Crl>I~BIz1b`45oF%P<AcXdi6op!;mEv%uQYs4VG9cX3QjjF@v>>pV zgE#Y~GeTckn3Fx9msQd=s`UmtI*{6bNrKfoRD$`Xa+`X6;;B50woF)=ik4`m2UekD z1Xwtbjt-A5PapcEs&iJwY@iTLsNGGZvXq4<+A%e^tJ3H|uBOu^j3Z29_+gGn6nW7` zH6&YZ8ncvGq)aK|s1_HhO;7rDN@S!I$|MF0Gt@pM@$$4$G-*PBhP=^qsXpZ8E&v6} z3(O43^AsI+5xOgySg2=%G&DyV9fLgE!C!%$GpljdM>!<n$!F$abDf~g8k2!E_pKCU zLvx|<j}{~5S-L-_)s+PqsP-Vl+IHWnrKz|#oY2~^avG?nW>t8w==|uoar}Os!j(+6 z`uLV5VR`{AX>#blyQ-oAzfmo%NVb%4VW3RAG?M1SkCs@K(^G=sIzA8O7h;Xa^NA@d zsaUqOnKn8#nUFND27`)M3msRh+N`xB2K4L{D+))IDN5~VM$a?epwvA>+h58=k#-CL zfM7lnelMz^^wC8-rGxY#3$=VvuF_kDCY$)Uao2}PJ0&|R^J(YkQ2Sjjf$F469;l&( z>?0BNG7dP<4~=AbDwz_?5OTjsw8|h>4Enut5o#oCsekNhz2n%jXYO(+Kz(4>-0eD4 zPhi|+LX>gOqoox>?<?}650j+msLLA}m8679Wd!Yz(VDYq4cyV_bcAdz!X~6IiOiQ- z&u>ItbLKL7GR2*j^>Q<A$g7d!_GaO97V;{vu@i)`Op1y=bPGEs$GmCWc*$X4V!c?2 zpxyL>Qz9)*oG(mH`9Z_0qp!M=wsXK1OGgy*h2v*-f(k5}{UA@oIwjIi(y!BG5Bvt* zJp46!A@V>y`au0aeBH8*En78<kPSUu(qvr#ROL)zsHjE7FBeNgEiI^}s8&NWeQ0LH ztX|Q_3#Zw20Z@#XX(MKUAs4YT@9r=5Fa#<_FUb#yl#BcnzZRvtKJ5GQ^M`gP%AlTY ztwFzz`ocKH+PA}*@5Vw4`tT<UljtH}aRL-8U(MqdEw`}T2giLlt>DkJcWL`u3bhok zVq>%=pl)JAXks?HanY#N&Qf*^9-TnQ@Pwkqg!!&z-8a5!H8ylnJvzDQCheR0IPJ8I z@7we${5iJaD`_wKwG;Ywt%^EiA)j}i_kCjd->*W;58+8?bXuXUofyA6t=wLF!)E>H zsD6ChYH;n7_=;$RmYhKICi1^n8x;NB&KCyTCf>-ocZOEzcy7c}h<EMNalh<M`C{-Z zrsBmgUa0PmJV#c&vt;MwiNZU=aS{|XTjY!e30%YiwzYn}Ax*G;>AochWj%#Zg5Uyw z$EC8#r80#8#sp6mm`1PBKZ(xe<`?n1Ip~O-92Cb$_cQkv=Lp>Upg?XT670)=v01BL zTr}k9z_VZO+n^roF~Fhd7r)>YlLOd$`vmpW$~}_a7}5B$caazQ+_o;!nJZsIqRNtA zx6=H+cumID@|V(SW6>QJkE2}34<~OYq4ZDj9pY=_Z?WWyLytUKKWsAe#<Ph_(^JF> zh(-Q$W{sT?49DW81(xE6Gqm6Su>HV_yiMGkER3VECwOwy(lHl_$WOHz#^koA&v6mA zC*4-_>}YL}w+&DQWYI(2PH|?ndRA>xi}tkMBqY_SEU@a_dMNuQY5u%M;pe$L4D7ri zy+?caoqYM1h>9wr1SaprwaIX7TRs83{os-A)EkdIWtk;XCObG{Mio}%=1mY_UJ|_4 zxS#map2vJlHPylYtR2hHcDon01ZuJ4I)I)-^u{#~JflN$fB?}A9q6_hAEF-x8KMfi zRH66Av0G!Ol4h=DhQOy*U}3Iy$|~y@W~R6M@pJomdsKa2t=5~FfV3iO>$BdnrC_Z4 zzS`(^bJBQOuVQ(qGUhkugDwkOkaJJMN1LGjV;(ti0y42iHu3I>JDb?PGvuCh0Ckwe zwVxsn4}IGT?a={wa>7UYWwjs_&i8`_-|j;=21k?8o8mjc6PVffmEeIZ(gl$uUG{Wr z1>wMUN49T|zFH6V8EnOOnt=;DxT|$o8yFLeLfqN733!oO7T8?;3^$`|7vT<!qDbMS z>{EI<uviCH8X)7~+8oyj9cwIci?Y;2P|p`E_CSi9s&`TZ<;$Q%H{T<PgA!6@%lGIn zL*c9sZ8x<2yz<IfGvQM6BW(m1CD;4vd)_@2*GOC$Mz_N9ZIJG6;8+P^uBZ0Mx1K<v zK~qiJjtc>2(4o-QaSdWyp`Xs?pFYh$Vafo$d0K0<EqD0n`5z&f*6g128|NpO{KOmf z$O-Xsz1paqo%d<@d)l^t4}lJ3_&eOF*PGP_e9!PF9A=41;)o^Q;Hmq2C~WGpXCXWX z4~6t!pZ<G?|KfV5?U6V9>O=h#d|icVq|?gB31~1<=MM}oe|+$*>7z5ez&Je?dRgrU z>B=W>_&q?kzzy24MUP=PZNGaL3?J=@6&!j~+l71go<Ffd_|boO$9HTpepjznkKau! z$Av%b^&X*o!R`iAcym|}{`q(Cf~)@irhiph$~oFSI6-ZV1x%eGRNL5qXy8*D{?A_v zK5hJM?vJky5Qu#>Yz3zk(39nN;4c1cMlJY*xLy1=EPNG4ocQK0_S^Tpr$^fw1!B+D zZ+VA5DsOQ&cBU83c#NBepNZeLCwDe*5O6VivKBJwry%5?*slJqe$uU0-`CIH_L|k+ z+eWq3f7^ZEXuWM!`>jT`aZ>BmdVj~?2G*YiHoUksKA$>*#I;6jFDK5>_X6)e1V3%^ z&bx<Puq~JiSgTg$ti?i&l%MFU0bea%5kBG~@LdCcH~`)QzJt$@01t<c`0*ar%CE!2 z^BZ(y7JGr)6o6(WcTb-o@pM|TW}!zn<M(@ig5Lu#NI+_VbRe!&{ODV(6lM5>;@78s z5Pq<|3BeDr*YKwF>#ZNK)hH`KZ~h4WHP=HL(Y1_S<pMm2SLplW8}pB_0Qx0dv{4@9 zpW*Xd!QtnH-h<Eh9gtN=w5FuiRa-5``PDnSY{i#{1XM?INA^e~(7z<3x;in;$*qfH z6LvnX@(VpcJHn6S{tdcuczO6}`PL8+BY}L+J$!=yut(B*kLY2t-w5EpzHbLp&mB?k z$)k=%Foi7c{O>bAlI&SScvyaH@h0rs_7BNrmsnsmt<lIHfiH_*3V3hmu-Mk{k^fc9 zL(u#&-o{Qv{8M+hpnC#FGeDgOMlLJ;CjrwJA@uEc2+=lBJF~HkSa*+%7gLxQQ*ZX` z7tL-j;>A?^7p;?8{{k=z;0Vc!sl7irIjM6m=D5*poe0lk9VezHfH8Aos2A~!6G7b? z<HT%%6GN$`x*xCN#Iz`|Hcre7otPz(yh}dJy7ozP8@}9!QSYSjVN6;RLypPwhO!Ql zvb5%)|F1V62mNz$adX+b{`lqc>Um_V(sjUU8JcI+i}OCdz8^qYv=p>gA5X&uttyyu zm>^p~OH<anD&Q_`gV+jXf3)%aF!lyPEo%tjtSPu(w*Ld7oN@nFn+4H=qbc~MlUoQ+ z55MoFXwy?!cQd9ox~*v4)*XDf`P{#}HYyFPv}-3csROmPy#Q1b4UCIx@yr)Zz_4zP z(yKHqduVH0eh|_&3|_VYQ7afv0BsDRG2@2kUr@lLf|XkHxLVh!Osf;A*;JUnq)<#} zjpa?TQW(mDXc-jL2hb=yBccev^8zBZ)J!2P8YYCFO4>0?$Y%Ty^uoGs0F@Cv4+<n8 z|8Z$Q6^i51`XTx&FsZOyVRNIuV%+!2JlR>QzsAlMsW0Pk7OJTrI5Oy8-wZAl=`}{` zL3o=>`-Ec}&a?@<wuZy92R35`iX;|&0mZVmQD8+Yu>OB^KY#tye|f}Aiuaq+wRVPW zoLMI*SlY+C3-~bvDBFj03dbH)NY$X*aj({H?EkM?^#GwvU6FW6Q9~K4n4Y9f3Lx2+ zfF%$2DqZOAteoLL-AZ)L+AI*J^e4Q&aE;1Cvi*I1!?npw_$xt?j51#NDEDicHHu}k z%;^aRBhRpQOiY*Ba`n0;lMV8)9M4ZS&{4^B_CWYHN(URvv*nm4S?j)`T9?hQcn$~w zOjxC!rRuNkFX%!L*leFf*Q1Y$RfV;juvA;>B+HsXIFe~J2<NG71w$vESbFWiS2+<* zvPdHAIaq1cBH2_1$lsqed);%50C}W3Ak{>tsP+{SD+#f#<}x`YaemZnBu_3<?y&k@ zb_q8isa>rcaa%!gUccL~9o1<ElOA4Zvc&6LzkA+4yZP|p<K+iMG?ST`oedx;C<Uig zg|@53=qA7R+AxEr)J|z;jYr=tFiW-e(E+)G4~_QmKKXUUC_?h9A_bBM#MM=+bzIe` zf-hNJv0>fOQH(HeF}iqdO!1O+z9CoyCq`(Jk$pFNz~g+BbsANds+2%;UU<XO?JIQy zq~=gt)Y`QpR1*r9Xs-&Q#k>++k1kYmQX3_{n4tk|t2;G~5?8y5Ht96doEM%|;$u66 z@i@UZKzzR$6^;X9KmlBMZiu~UTNxQ#g4_%apN~N@D*OcN^-TXelV+pB87t`NkSC#V zZQ*z4x_@;YeS0CQn$o9qF%V-(jU|<`YeGCt@LqSvILR5pAh+xT;apG}|2EE$afaqy z#;=^ES>p0RIf2xx%fpi<DZxD-qrwqr(i%`q*l=ksp)-Uk92#eA?3tneJXZFN8pk-6 z=EOE>36qw<Lu#t6^TyeEYaY{Lj&kGVxDR8R6X3b}IIXSWmrx+eTPUWDxWj}3-~P{; z0|%8YY7OWx#8jmQDt+Z?i0Yj!qdbhVdureDZm6|Rc!iUolIP*&L;0*<7`r{3du`5T zji0AGw%v#DF}47qf|y>CR895`IGd9szN&jTl6|j&&4SWYQUFshc7Yx`E2@Div1XTT zWxMzq_sQugsYWBO+xq^hoTJ#JIoDTJetaBqz1uu)C8mSa$J6M_0>_Y1KF?N1s#41L zB}Wd(;O&v}p*@*;heIo5a}o+<;cOPLBz7@{;|%TUUggj3pWV~Q|L|IWF!(Zvj}{a} zL{#{`RX;h#V-mQR3;)S3ai0|f0tu6MU_S6XN>Q;yU9E{~N206Cky;x;tGLOC%;nC_ zo!;D}$IL}C$IVCUlaE*A^T(^JXbS@@Q7~UI^0g7g(ysdBCAt1npA1O<^4~rVzFguY z?gF_o8!g&drYEB-5d>t~BY!Km5eef$7r~f`mF6mN+06Yb8q#dET`I@t9@Nc2F?E8_ zo9@jajp|UOA+}-^1+Pn)S(P`^v{e<@BbfDuYRLhAS2R|7nwxN+wy7Kl_u;{on}qz% z-`85*qoiQ3dWT9pzl2cpm4m&TOT20#HIR7qg_pWNmj7@_Bffn6-{sAxPqF@?e4K?m z=2694E}(HPRWKXe*xJdW-<{*OR;%BF<0t`<M-H)4AE)fjFKrvU!_Y=(CFBRZw5mtd zE<JDj2@ZY{SH-a}DH=3XwvyyP>=E0zqgt)e$g4X(YiV9898@su(IE;6o=hNSWF`tp zfg7-8lGCsE>x-<QgaWI|ozkJerLvHZzATLGZJQed`*%F)Er6pr_M&!TxVUmas3Y-D zQ{THA+mn5=dW1}^adh;)nrFChBj-*fDn@=|T0lY0TO5yyEoDhOip{$lF3qQ55Xw+3 z-H9hT2q_Hl<pPF>6;eaApTc8Tm9HG0dHKu}<D4S~Og@J-4~kQIb0r)}2uGEV3OnjB zgS&RDk#dbGoo%(9YS0hu0w38D872m!7{*o*U={H25d?M!ZM~4hXC(_*(yoebB-USR zwz?;ct)*XV6P8$%<s&H2mT=9a52bB59COdMRmvrX%#6}4COVeA(gmRn2M`{!p&0I~ z^<ba*w)LI<8J_z$>Nw-9{zfo8rimnVEHz^oZCvTB7zk8yZL9)a1A+7EMA%##$HiIe z0#(cXxrmR@n#b$GO+O0V^#MR>${w>6Hd79er@t8&Hd+pl0^VjxV-r&-mc}U({`E%d ztlq%aqUkP{$~iu(oxJbOFG}J4i(a!?KNfdrc%Od*YPMHS`6@Y*f^uN_DD=Wsf<cWp zB!GjRhjuJ3BbWjqqeSKGTPq4(Zl%|LcN4(iwRayZd;IR)8_p&+3>|wHwbk<Ss}0zI zyb7KRUH%oNb+Br&<)QVC&~!d4_%`&sac~QRgm3-Zk^SRsl*}biS3hcpD^H{>kEp&w z8uBU7jIxHFl!3F0N)@Vl4+l|kluZoRy5f?8#Pk>2<g7sjNBz)HJM=#WHk2p-9zw$8 z#oN?tL6uV}%ySU>w|7?H3~!<Q;+EDSpdx?qj&KNHR>ny<{Z$A~snBY&*sRXA?V=(v zIs_beHfJb=P7hzw9#2mAcpIrG*lm^4iPX|W67r>Sf0C8Q%dKn4ZAtt<EZLO2KWTP* zg`A?3XT%EQJW!Y7{IEisgpW=@#*S+f3wlFl0ba2e(_li6u=W5zAS^UOg3t<Q0e#%L z$ESaiN9%`8?rhs-55qW_SpZe{_%-q{i%2VPVg*IL+UlJp4oaxv5k@sN+{hkAVDrl1 z#;j9dQe}NUur2EsMy7(C9r*<q<L4f&f!f0gsg+=LLB8zch<Pk<pZvjb|3E6ZFm_B= zWj{@BEW*^hxn$``5cP2uSYK>a5~mlPFk7p4M9n)%94=I>vM)KZeFkrj>^|?GWu-w; zPT%?kEP(`Tjs(eZxfxdq;TQs1yxARmxWO?5<nztdH96~(E;;XBcge+|`?<($eMbCf zW)sk~CH482qKNI+tr>E=q+|6F&lk@oP)R!AR^&w-a8f-vV`bM#*430MAnMMm{XvBV zXjoH}Dnu$#7|oZ@CQu*WvQ9)L?~s8l$X)8Qeqp3Jn@u3ROy)<XYTQ;yJC}ai2P1%` zRJ5W#zGa-SxzD2Z{7IZ3wnAt}z50Zbp(+F5_Yli~4tLhYxa}ZZr4KUx%pE&HxU}9z zPkMF6)^s}lNh1Kf2ERbcY=ofV6jBQ#r2w&}v{BcCIs(DrRA>mq&#IO*N_EM+XR&3P zG6Iwa?K#A8;hcFsQd!oh(a07s{<b<1F_}%a7fZ7pjD9E0<7)jZr{>GeF;i@jfSHD# z`@{A_!fhaA4Q3M;V)Fq2DBgUk=-t;5_M)Sc8S4MiASk^jzFXrlA6LjY{hOn(wf;8w zHyn&!VT&v1B*(0s4Ft0)w9ua{X_7m6W2JiinC3$tEf+_bomOCyJmL}9-OP`M%bF)j zqdt=X1!fVx9T4ZY;=RudZ5#@&6~Gukju@!dMwg|EvjGo1JdGZPL7Y~^$h<KKrMPCh zZ&i#|8tz{^BFpE|2tUch;e4?bn!1cH56$lm&DBIkX@o!7^vRKe;;r9WSrSz_mp1mA zOfMxM8+D%a0Fy{DJPb=kB_(h&6mq0NSw^RBZ75PT0?4vZ70IKk=q}J{AoVr;%8h7V zbOdfK{j6@CWIuCMPZ_)@r!iE%?(Ly^67Ey&H%e=13?TWVHJScO5A+ic)%im%6j%Gs z5PIPLEAjr^IjbamiTF$6OO|}c{C4~`qTjGj3g*yq202)T@Ak9rZdbB?yoe=+awOSC zfg4ptqUJ%HqTmO>Lpi>EHu^FdqLO(%E*y*|m*SGo-Sa;AazW~(_vO>g=gX@D(*Fo$ zyaRZQU745gUP49h;A4+;FVE?DV_)F00{3Sl>c$<E0qOmzJLvYV`-21WWk6SS{qJAI zHbhrl;6k%ugw*G$<;c<*lPt~AX_1tH4DEWyM;G(<rxfLBdKpete-#7qHlnZk!l-ax zT%H^uHVgbU`>pd{;#4j5@e~|TD;nHyw4thwlQ=*PjPm`_N9+p@jA})5Rfx(%bMWk+ zsoTt-jn}fnst|%!O9o`mc(c!Ws{7nk-HVLKC%-_c1G`oMR~0@<6Pxj76vn8kq1&jR z9OYG}MHAp_?WxM-Xen@wW2eY!j*MPB7GT|0H5}jbHNqCmAakw~tR_RU6F9P9t07qi zWM8V3^FO*cgSSU%+wB-eRAp|f#HO@7A3uK`eEACgeRN$yJ{6(Oaj_XOXT$<VSGDyE zNX7>kk%%ruUjj)WB)TYF=`-kG^{=l#UVgYb#L&?dbhz`DcL=Zz`ULL}{;hvbE`XAY z*7vJ<z|AEhp2h=j<jdu!|C_eaJjZRz&<CYZO@%yY4e{ky^~A^s!31sm?8b0zUV|Ek zg_{O#WMaP*4(b)3QTI-Qh1)93>I<VV7aWQ)(*X*e4q%T1`)`VgeyP6RdJ)b5b`~SL z8N4WpET0?(T|Nq3W3^q)lloCJ*YgqAT2RcZ;od0g=ZP*UM@^c|+b==;Z1$O`BH8v; z#qC10p*3%<p;u~7<zY#Cs2-h(2iZ^0*t@laFvhM+gfQiFHdE8mgR@N>+b5T=OE2MY zlVvq6UoQK+oP$<)eEtG{`SqW=mvXTS^WB9DE~eFS*W7sH&PX}i(Rky=8$Y3A9Fm5) zl_PVWBZk~4v=%dC#v5PJE~@U9gt-iP%}8$wGatKd;G9;{gPCllHyMOt-3zok=;s0A zX!7V=tL}{nFu;DSnDn`pZ=<@F5bsH5D?VI((drT<RgPM5t#zsD8{=4T6cKB#ae_m4 z2H`B%n%Dtt_KBY}lH+o+)dHP0s%my8W1@1mWW-g?Vge_x>xiceoQQn)A{&ka^6*TQ zgpu)o>i(N>-pM7*jK4Czc*Gaq`b<lPno<&deN;QmjBi%`@M0R9jOjBG<P4e8B*a%w zY*H~?F(RB1*aSBW=ORW?vI;wlL-Xnmjmem{@nDwHwX(g2>d4qKu)1VEzv=Sk(<eol zpf*G#leP@<#X!Ks;)?|W@qyoTB+VM`J*&U3;l%7Nu7RGsw29BZ)x{DZ2z1t}1P{cT zm5taE*e_lev7apAL*9v}2zkEqB3`1e<kvo+?)I8PNH^g_Q?2`4dCN;k`qYjLNL6j- zD>x^{<P>XiXb&t07`{D~1L6n7wuX=7l(@e4loTUJb-T0pLuf<X1U~0mwK=_h{k&1j z>9~p)H(`j^MUnPq;dB-r(ts&DmI*(y19Q0vI$&+zFAqF1d&}1@Hl(x)U+k*H1Y3wP zSduG>Dg<#9if!TBOWYb=!WO<QBpAoxuW!llnYd5Cc~rZ2zm3`<(hJKq!6BSobBK(j z0}YgSMA>}KN--JWG!cTak=EMg7<z)%5^GjAVhhFV@9Q-ev1PU1A2p8}nYhCxaYIzH z^ZnTpvZwG(Ai_QzTLCNJ0B2N;NnMnvtQ|VZkXN=kbn?tDOTb2RUXjr5@Xm2Z)S*!f z#r8y6o*@ci_;2;-yK7FL-=gc$Mhzub%N@k(FEu9+3Xrxm>U@j7y5`gXQ>Uyb4a(gJ z&~9^JE&<SPiS`h0wq7Ka!Pb+rR<CxX9c+E^iK=3+kd+f7YJ4NMkhJdbaAN(g2;}yl z39+xhgUP1q8B4Xj+fG9*X4hHaZmz8;5)XBN)AvH_ZfwUwTw5raNvK6N{oBjl-wq6K z7t7np`VkI+*?&zPxwa)m)bWPc_xJWNbnXcVt}~fU$jFBC$1!eV2MU9s;YAT%RZnCf z2^e;$mK!J=v2}_Ms2dJ!cVzqa=&SW$pZT`+ohA*#j(Z1ze1-4^tK`$bDO*j0RitSj zg<%x~%;g~~g>Cy=VgO=JP2rMGNk%K*4)D;rsD3XH^KJ-NTyJvcLpz@hEqml2|BqOI zfeHW^6f}i_LB#*Zf5XiF0Dc@>tmE(Ak0zx{4`bFY{=uEmEV4q!##7rFOvg@WTu#Y~ zu9ySxk|Iz^qjZeRDF%`iWh;}Fc<r}%{%Gr*jO5b|3$!$AD?*w<HPID5d#@-~?*K4S za7pPc_1aKKLrWcRUZS=ern=Jqe*5P9wyimS$pR*;<JW}K8!0&xb&&8<VS3J*P9gTT zx8QqYYKk^B*voR+HTz!lzSH0`sQUeV^_T|;F&797*S5RMbL4Mm+5|!pBhUF^yCM0< z|AY{xpwWqc{C7aco*(?@%qC+<u853FKmre*969&*|M+hoehF^5_*?i8&%hj#-ap$x zNM^1BzdpflrjZW(E~sOr|MAA2>%!l1LikNG`N#iEY_bTGjGYH}?MzOFb*`o+8f$cN zH8Lp*L#1{ZYW$_vE{4ZmjKDW48{6hSh-Y?F!r)utdO!2R=+&xPH;sd}JLF9{39x%s z?KisH(wY^cxw;CZxo?Lv-;ISvReP&lbBCnJ6qOZ2657%0<w1~5WVCtQqISu09~}4L zw1PiVpOTKufZg1tqv2HMmNc-+%=PNgN$pr85iM3NYejN(<b)u3-j=JZTh!<^`X`GX zM^>d&>(?9a7Z)XMqCQSXfbmPT5R4@Yr&r-m@H_aRzH0|On0gg;h#=Ne`_A*ePb~lY zRcQGkJn4*1E43Qx9qbuCt=wLF!)E>HsD6ChI_ByJ|H6`r<Tw0(&&1uNSLMnqGR{O* zCul40XYQ?UvxC2!zgnT=xl!vPfxYLxE;(Abw@>i>V=qq^4Ay$${Q%#N72v_>S}P<L z_=K(p|8;*(Jor5I?EpPN7;Vd5H6WhPKN9G~o=w~UZ_=hVngLfU`4$A}yQ2j;ILRn! z;VP|TJFQf!Di_FywWxPejELJ2xmqnkM{Lp>-Df63&~OMFKDO^eW`N;`M=cEU`r4VR zo^GpomQC}@Yq1u{8welQe%0z(wMmuVQ+usBp{hz+Xi)qMQekP0?VF^F^1^9(E)O;C z8`68Uhu_JUe_5eubzNK=^tf&LB=pFGN4isQJoc1jrok~xQaGj+Y#?bEu1@%!vMJ%E z0#N|(XCT2TL4_czLThbSn2dAys2hM(&|dKW+4~mewvl7qzcQh-DY7Ed1Ro+Lmw1W~ z$Wa|z-a|<_sq${AAZjGxnj{zil<iIOpYCtCzwGurKw<EpKoJ9TpxLdgZ4g#C)7@Xc zyPbtn9rYsD5h5NSYvwt1$E8K{F!t<na%Bp#9E&_C=Z3yu9L6p<WE2?v-8$tH3#=uZ zIzV(eVw(3CX1aE8_UTw)+AIoaCmI*n7@qf)rCMKuqegomD+HYPDS+_F_?+y4<{$Qx za3JuK10Nmoo`L5JW;ogO!aiC1!Ok7L@#F~~Aa4a@D=l!D7qcJqFHm25?Nk$Io9~R7 z;YS!Kg{lh&;rY`40qIrppjJnh@c+a98dV77FYuRb4}HZ;e`_IQnxAu4U=C=>Qwm*I z9===6h_%n7ID{P;=LGQ_>y9)lz{FJc3WVGdRK@}Sc)qomisSR7W3$%3Bm|jUCocoF z-k^#3KUZfHbBs=}&PSJLpU*G01`3S{>R>`v#T(!~cmKMb(UGj-pECHGM9r5LbXr|c zNi0WTX{8M0YO%Rj?Er0<Rxg85-=M+d!__DA{8HoY3{r4CmTQaTu~I!<5vI!G1rgui zI58WihA+hZooW!80&^0Qg*B2Ad~$mPOwM9hYJY^KLn#l0A_2-odtPXJv^qvl)>;A? zkRFc83QVq);c*P^U?`#ik!BEI7HMXWz5jxk1H=}<x4gyH41Kfxhv+M;Sm415$_G$| z|BMQ%u%A*9ZYT>3?Bs1||FU@h^73kOUM!V$gct0hZR+|Zz+hIeS4MmFEd+x+e2C&M ze9K-yoNW8N1v6pB1LMe0Z_8cYOroL*1H~bKX4W|gq|P1al(O+Ha&G<)Osv})<TN`d zZqX8UV1f19W16_(e^?hwl1TbG8)QLE9S0Fe0TBjDdY$et;~o@G=&+Y}aGkWxq)vnu zc*^|8;M1=kO&t-^5h3>xSAZh~)uNOi>D+j{?26zQ-`QtDwbDoP^3t4Kd@+s>VRq0B zJXyjFP~51_un!qY?~73<A55#pfpO4;e_IEwS`8k+o7{`620x>FY`~}%*zpRV!Ox4{ zRuCm5rQ@b~I6izbzL*N;57n_nVbvuZwK5RhXO$Qu**~a#c?$$TZq^QdNAF`?AEsl& zXrH!66?I7F!H|vFkJP3|%9}%obu|?_6A1SvSyPTi2SGi}rc;@UQ7Ku{Hi#F)#BR4e zJXMJqx9gP3v4B5s$CwmGRzb85(COggg;{V0SO?E^@C@8?Xo;l%eNo4On6D-Lymw~c zuzlKSkYISIhe?}(!7$OnD$tUZQ~Aw63h%slR~s7*ZEV;l+2*gyGd4*3khV2+$Vv5( zQ?g2VGC){teH}X@@u#)Ec`oWu4&RU5MS65ayMI4DdCuKGjmUh6fi4SGItlO`B1gmd z8j^Vrujrm?BUu~Ca_8aY?OcRPd_-0*OQn9)byp@G^&BK87|B6$1QL%feiZFzZ9qdH zQDkwA);}MuGv`mntxmhMjs}OzrG!t|C?ocWh&o?R79N&Xk`6kNmpi7>YM!c-m`+AF zmCI<x=J4vnhqLn!g2s{FFQJoxAPBmWKIdd0tz@Oc{%Jqp&o2s7uuw(y`mcTsLXZ(g z5Q@LTZFH=HP=LOey=4r$r$dDb!jg4V;t)5*y$bY(PLv78?m@fY&FY@ab{7b$b=f`W znnw!~P<ZiHtf0_-G+d44P3^c#@spKvKLlY3KC|E#YeWM+W{nsc(Rkre*wti1xVh(* zVQOxX`>S+hFbS7SIms}DXwN2QG^A-rYaDf(J+`waR7=_J9h$vnQb<jFo#GsSRPK<P zGCB|X&0PG?mF+@j^V(>qbJQ}~>>_=`%Q?hP_Kfnh+WCg-xg4sVLpHk{%IE!sNtw2N z7i&=3*DoI*h(5!Md;cMJ0B%rCcwN)DJsfu>g|c@iN&HlIkX@)&A_EO82W0pFjR6G` zS`lkE152B&bIGyWMaCIx=;Q=7gmAzfe}B<8Ct{OjOuYzxoEw`1SQ69AM@tqMtEW7W zFGh+|%I`%Y_T=#G3FYaE+WHh$Vimo)KA!`mL?L-AcICIlZ;O-2KjfJ?nS7ocKMfC# zimph_u5y_BGseft0M^L(Sd~CEg)@UO)#&U3eLB0ifRrdYJ4cs)GtmT@=YKz&d_E`R zRHGcZ|4@=9YtfU4vLzoWce07&_DsZ1A!ah6%`!L^X@rmH%21F@{3MGDQM6jz>AFPI zLP;0G^POdNtrkV2Gz+l>Gd*C6oj9Ptp^v*`cnLTl!|q^FjJYwaLq^Ju_JxoUhUsRz zgpI_dft)2^5%6J;t^=o`#SjdLuV=}Y6bJ)_WlQ+|$T4p6J_YfY-oWbM`_-K63eFx; z93L6oLE=tU@e|4g{1LS&;=62%EYI9s8Hm=C0_K4Dg@NG7Ry^=PosyrA20Op{_%Sx^ zNhPKxa~^|09I0=C0+&p&a<Fub-c#W*vwfP~uGxK>O%Vb;@pa1X{L#L#yRf9U+h{cg z1?(Vh8AiJ;t4uj>X-*XmDj4{-PK1OkqYviiB??JkAT!R9dI56O!HXrwY?{qP%b+2A zvS*e--dv=hPME=%#|c=A81jq1TK9P9V(TltmlSP*F;^4#`_jdpM^^VnHOTbo$pNC? z=bx9Zb2G#98ajxnmOyGqtifovT1O3q5<)S2hz5w{D9*e&Hx>Ulv8SntJWaKQ7cYcN z9@!*;YOr{k3m93jMpaZTLzqW|<#1WRUb}L;U!ZakotP2NvRqs)Bbn$Z_yo|(P1#1P zXB;X7t})QrS1=X1Dius=G2cn50%TO`joRjLyth<}9km}WJB%`*G6Vx0W%K=Ekn_yB zx2M(&$~ssP3z=grVk)HW0@0%SuhSj$+Uk%jIS#O43K2OZR~hP16hr$)6=RWdiAfJp z=V@)o`vUf`S}Be`N*Bpliyu#}60N%;Q>N4f(JZA`c?z3OCzEP5S<XgW*l0Rg1L_OL zQmUgiGbD_g?e4JIUKdI-yY+Br^o~aBhoL}uZ(uZg<KPn-1LQw}+{!+U?I<WvE{7R} zkg&{?r204UnI2&)`E=CjG-bJ;MIOHIIV*RHW8P`_uptJgbp+rsoWia`58lbSbyhN^ z`<2o0yDJZN0KNNQ;n};fGo=}0?_JbP2_L`Fh6|8Y*k35EFDR`yZdNG|tzQXE*E0{U zeaD%3*O2zQcCT;o<J(O<T^{^;H0sSwCoPZkz9VGi11=b`HHjxQno}Bpu1_|xGRNjX zHwmU{S<SEtndU>IUrWpNFx3Bk_aTP4^)-#UP%BajCGPp|^^N7((`!goU(=i|f%~m* zg!?#UWt>_q3zL-f^yx$R31Gf#y<?jw(2}HEwrzWtZQI;s+qP}nwr!icY}+<(o$j8w zbMbBcg7sv+5g8#$FoywTgB=<0;T=FIcX~Jdj9){%wz2|C`6a$3KqB@Ri=2|wy~KGO zC0AKo0z-C99eGs`L?+fFyWfm}(on<9t1sjIx$wwPjnLN9%!H1fsPae^&pjabJkC3G zX|-1Bn&<E>rT6~yf_01P2bf1K7Gq1VOOI}FDmEFsdGc^nE0Do-I{gmmjATh-T6*FA z5QElzg+#!K#r$53fTu&8<iLg%(n-SK2P3uLB=bi~9%#N;(UdQ8+DEV)@Ey5AqftG1 z8A?Th2Yq^7b?j#K(8#XmCptk#ADHq_^E!0Gq4ep(Nn#ks6O78U%;_O<>WdzYxb2h# zC|Ry@+0bEbbsisUC?ID3xd$T5k?YpU@2^)?i(Rk&RN{xGM=P}`_l83N`olOwPI=qL z(ej1dfp|uHyCFrotarZ`5p~F)TSH4bH!BP*uTwbr4_TS#$18?cZsd3fXAr!we<@f( z%w0H^Rx-CnwYk32UB%J9WGthDKJI9sOE@(*-5iN@Z(9gfx(GZ4C+}_-3B!r;)#yB& zy6Gav?O#C$`nif&X!XJqM58w|h(pkEoB%<5uH)x`aH<tgyfJY7i@T`vc3LS(J=5a+ zk;FDosD;^m0JY_PN(T~aelve&4~ZE)MZ*!x-{746U_q3an$u;0wgzZpIDs~`DB5#^ z@Bm)Upz?PiiL;6>70P->%TsjEJLrtRf4nR~n3?`ABaWTwFV*Kb-zJHeck_uBC1uf; zF?w9C!5FmnH(p9rI^Cl9dXhyGu;7&jmbN#G$P*+>Ryn)Tpm8ttQ;F+ZW!^3JSKwp@ z7^NX{stq$79j*Vx-H;SxlDuNKmecv`9LEcx0i$gq&Wgfuqe1~R)lU(J=R5NOjm#DY z8xT@)WF7h$QH07Utx1mSr2LNgLv#XzZ2h7Sy)~Ys*uS>3EVwYV?FbEPu!tQw?Zn)) zD4DI2<UQ=B9$IefMX?LRx1T;*iENHz*If70K5!{9<3=BHg=olHLu;N8TBGn~zKd@X zNQc0L?tbJt4NjhHEmV5W?pS2RkcJ3FLlq+xoGZ;tvI?-(2jnWOCM4%Z)ja<SZwDaC zFew1=TeObn2<!}XnMDfa<M7P2;IY8H#a7)PxxD*Oth7Rg8x_(y&Q(Ig6PEabP9~5Q z$45tDZ9NZqyg|EWM=HaqvzTwq35(QZ2_vbHXx-uFx)0p}FI31aGDsvfrc3!Cpw*J+ z*MiV%C#=bBaQ>=d(sEK8y4FY_-;bAL0+h~blm&TO!pQkjIT8qP32Ci{_Sr=Z3CQc9 zH+${0tmNe?1&KNa-&wjebOGxhphj%*I{*#NZ7+vKlmZlq(-xY<6a1yr2%T%l^5(W| z&-yC6*EPA63(9<5k6H%|(7r|ZTM_5x*!Ei>&cDmqK0U*Av|#YESj!(!jP&(xvCu=e z?@PV9VAw!A$~vP-q~wm-E%35xYUpMLg90d2dkn37gsn5AIR+HGj#BVkQbdTz0ZkkA zRJ}f?LvWBrb1#v-I?bGA0WotT!R_yiQgk?WbIlOLKGIWE<BP6N?e#4YQ-#~Wzesr7 z*zKh8DoStO<EMaRzxQGA6XPTMqSd%k@X-Q|Ekq&)BVuR=(K#<F<BS7XBRbCncV3Z9 z*SBtvFEq9Ii(R{#>6GUS&yYu^4IUcpnYXsf^_Iy^hXABp8f=)W23WqWL<!uvXfixW zGR6^W-R6qO*6|RlbrW?v#~L+;G9}COmqe)~bUv+^Y23gJV`6~DCz59ow!%uN$wVBZ zv1DE#WfK4Ru|z+Ii#F3GT+~nB5xQYB3&t1SMC8C`6E9O?Vo%SePg17r;zZ=mMr2JN zvOr1qoMcnEksf;2>>AXX=eT;X2|xIKCCjdqS6aF+nLh$VC>fVhrJib+CC2?BWk~c+ znCRe?&~{L%8iv;nA~6qsj~odcBKjGhLZ=d>3i-HS?kzu3!4XhY4T1U_g`<~bx6BKz zZAFWk__vp0kDt;C(<*ClC!bSmSK7dCPTnkUHCLUZ?kNi4$}i6Ed=VKvok5q<HZ~jt z-@LT;WD(f^OQIQ%vr3+NO;_Tr&`*2bPd!8{Wgg@P*;i6K14SoHBSsOH<2V~8|BoeM zMF&x-{_Jlr20fgwOUu_uGDz!sG+8wpg#}Z2)}_)e7i6>dd0tVP-y*5v8)%NvDYG_G z*U2Mdl4Hti1OPT*%B3PwmA*56#Hy2o9qIhhV<K#J(k?}24o*f32}Ip*oHEj1yzkEh zz37q;zmg6THBx33bU`LiilhtT#o;wibmzI@wORj0RcLer5j;K5u=@C&)|;2j;n+VC zObMLvbuhzg`|?BCWQAw#B>!j*rWmxOEQlH7RI6IH!@D}3eQw4liEMvM)cDpKA<NuT zV}mVjR0J;5kKT~G+J<R+zLq*hh0ry1&1bdKie!lFbsxFwY)4brnqO#t(vVU<UYMFo zLJWx6-wv}AJVz!JM9!c}jOP3q`j)-k@cx1cr_+ej#uM#?%<)?PVIF9~2ewmbQl5C! z=G9H5C~azQmt2U9-ivC;V-%Lc&#WwXBq0V(2U$fh#F9Mf%)xvanRex%PHlb5UiSc& z5uwfDicN!K%i(+|K6-cTy5%|C>@VoOF*>h5BAy&J+j}*;-duNO?GdSJA3oTkd9+Rt z5pb<x84b`fDOX%2jZ-<KJ?*lzL2-&?6yYTDr#^;)4}opuA$a3mX|#2P_DwQGb+SVp z_!<*P+TwUQF96~LVNdyY`TQ|6p<DBrR|4PBn^a%0Zz>@PSSgdkT#duDxuoB=B3J|* zY(6v<uGtR)Fhx;LjR-B#WZ&HG2;bz>q<2T7(}lW_L+B_*>4P9A(7;3cta@EA!K_yg zGs|&_gk7PWIFlLu_aD2m*}Qv*mF^JO_VBPm#9@IoYFL+*8ubNgGuM`mYm-YxTB%;z z^s|EJ7yXdN{snXS7(U{k*ng**I<I^t?EGg^8?N?^{n4J^6VV4=*_ziY(D?g+w<X@t zT-WAYsB1qiitRm4CD|sGOWfR-F5|jK`PoT!huGh8Q#FW7{HK);<c46=n*Hd}<;Xxo zu9d^h7gcDj&-=U<jzKURCqA+b^;*@0_rs08mc4v?JD@awAFwY69GsjYOP@D0@{1#R z!m5OOjO`YV_n*&l(hE`Xa|jdIE(IfVjmF4&sr)&ZqeKgn74%r)?P)K%MHW%PGXz?h zq`TPeo_LPgFo<^B0E3vZ21P>!w^|QyOjtlCXpVO<F1G~%NGdTDj_)9PdISo=xxXTK ze_TOYBh+@tKI}%#I0sWAy}-A)%<7y>n8esiS~P&h!zp(VZqWOF&x$V`mw~d9Mv5`- z%a7wpu<5y3p+)BxTeE}rli$IIk}BwI^th}Z0MuQ1T`mZETc7yqF8T&1$CD|;Y++JW z3N3n1NiRT;Rb2krlX+%rB9Hqvnr-W*m9O-#l^Xh+H=g3;&~sWefpd^9Lg5srzVL)F z$A|3!yYM+IDs7hn*ocqZwtbXO`M)nRiJ^H6DdAVyQBeBz-AY!$L-;dO`Y>RP<WpLn z<%1MF@d$V%3+4vOyX^z~vL<j1Fo#GU?1-E|1Tc9T2>s3V7uKW@`K3u+<9gVF5JI59 zFfuec66ma8AT`a8WRVo#!)ac^Lq)NYoxJ?F-oS7(bBR(1j>kkv<!{~5uZW(#wJ1Q~ zNYj8zq3M;tBMqgxp7@haf~Rf34u4JrMSPR#9(BI1r=7kUp5QUlTUXoLMGg0~loTF4 zCpJgw+`N(bdSZKpX}P^RS4x<zho!7K;6?zy*t`M+P79Mp{4v*lzGg2)l~YbfdUSC_ zB2%P|XbSvUCHc58eE*LuQhSSTss%}wL;c*k#AUuXPc{$gKgbeZNdbvqiSVkqQxB8S z{rB^6@sNxYXGHN6bq8uWvbfIJF7ZIt>cKnmLm>aoB#s0@S!r8#i^g;e!_izgFm?U- zi?ig=CZm0R7!@Uq^$hfcqZrVC97P6!4Cwg@^w4mt3{&$NJsk9V8<Z_DIr#88QRLPx zojbQuiaL6`oFT(k#1dqI9zucAfnxs{29u2DqKeiY0#9doA|;m<HgY*}zPjn-<>dvy ztl?=GprhqXg|k70ptF|=<|SgA64EV(iiaS43#(}L*5c=hZke^rZuD+`+??ISgOch* za|X3#c0V167K-*ljBAffexs(Q7@^j-anFtg+j<X2%Hw#UgVAe%Zai>~OHlzPu9%F= zW7*CQedbm+hI5FPs-6^1HvT)=2&GMvJcGe5HDoG}v;P>9;1E0~62AXXz%kf2Nn`{s z09`}qZ9ZO6Qe;<KTK#)(b~)75m5~LVV&}qU$4wstqdjnczRB-=8<qBQQI1{}V{ECj z@&ubuF?^(EdCUiv>+@x1V_SG7eBzL1I050}U`1f#4*Fc2&}<&3LT5%63L~+(xPcxQ z+%7UWc)fQkp3iRJpZtnMkx0!Y?@wnoqQ<SvK_#<<nq!278GT|9H8BT)#Z{<P8U=Tr zsAu=MQ5kJD?uCBBX>69{mG`$2v?);Brxceja~<VUXnDXaVN;~^S!)zkCN~T*2jTpW zIb(R~IMVp+-(Jpb?FQ!GCfX2(bw_DeDyv3ug#hbz`-0H@v5IP+5R^BXwd8(3D9x|0 zh`BPHJjr&eiJp5_pK*wUDv^VbIz~~SUL?lTNeX_;MBWG(sCbI^B~&)BCdcGUt!T|` z7xMZ6k=LN;EQ44G<OfEL%ov5tJuZBYya|O<l6&`2W{qhjXTh!U4x(%Oa$sRYN4KZF z!L>JVz_^6;c5s0L9U>;^T%)wyl1{rZmT#kzCa0+^FM^KoLZ`K?qO-e+JXywkr-|vU z+%Xl#@ZX2}6=J;8M6}?xj@WJjDCJ@PC^2k7bd?U0=T&ax8F@06M`C%%HlGrT!#WpE zcEutPgp5qUUM*7eyO#%<Jn8&6L<)$^@ql0(Thkp)8Ya|%s?Fb*7kX6@_GTAXox3Jj ze`MwTAET)G>lqu*PEwM+1jyp8Z1095=bF1B#&y0E(Gx7k&1M3?b*GwmYUp)K@FrbG z%!pcSRi5ke?g{S(5LWkOqdJKkSyIbae^|3no(^z@a_xEdO62`u@|f8Dm%^yD!5qTL z?ojtoXnYggfla@G16a^ys99%swk&j=rnQn?h8lNYeMX7Np2`Bge5xtcig&)0)%L>S zdKM>#0ICb~)MTu8Hq3q$-=k&qttq?r6MA{99m7_|%5J@2sKK;j0GICa)UMK@iPXxW zQ_fy=j@5*fR&wg&gSYu|A$V%dKxOGgs!`w~5P_7GlLOJ_`;Gn9VTnWh`>8BxUb%>j zbuwVA2&u(M^1t+zSl%5SZ9&tJW`5r`F|>SgvnNVUK2PRmvb6F~msy|NSy|BtUX1S> zdW;y_8OV=k535zha~u=@M5NASv8a0#JBdnqCX)2VG{pr?a)nX0!+Q#X1!q@(;agR1 zhgr_F03B2YDOKQkT%n%%!Z8b_u5=DZ8XGqP+;m-@kC%}Xc=)9Eu$-CwZ`$SS2f3=o zjgMx*wE}?jFdfXHObbkZV2#pAdhHkYf7sbyZ$j|=dpIiuw3rn_enP>Lw!SjgRgB!4 z$(nYqm8*=ck$3$vOHHrr1}@(w+e=z%;cHfnXaT^<D$S5No5^$bG0hC6;6Ny_o@!)5 zbv4IJYb2yO>R)j7LCOK!XwHg!P_a+0j)j(__(n98B1Wz^^@iiC+p+pEhIU$(lg7)# z!Ov`Ve^PwG?`EwdbXJ_=)FIZn#AzXJA({XH`-K5jX3!V;nI7SgwR(s43^2#Mgr?KA zE|H>*SE%7jqh}<{s3P19lamI~lNfi^@U?1Ntfvk`Tm~^o4K;m~Ak7Q|I~o%pM^Ln> zXWis6k}tT66?r{&$KtXAO{7{JU@obB+LJ>C$0~BY6UUDVl)}sc;hdXHknajG`4{b_ zuKXPYlRhV^1n?q7^(1$NQ1jF)@Q8*yOc}380z)BiP}Y<?j)hry#+mxoJKIM7W!I}o zhtH$W+ju5zY}hgZ=&_JYvXtwz`33F6pi}~G%*xD%F!WGE8#h6Jx0`CF!AB9Bnznp$ z4lJ_qRv-7Z{y)%rty_le=h_czC3anJE#F5QOn^wn{G6&4m^oV=Z*Cs7#|ExMk_VHv zU=sXjR^#PJ9jS-Qas<VTuk#vN+u^DTKadCn?Zmm_4fT66k5QSl0*KSz*@VW2Tg1Vf z)HngU2#!HVzP(+^sHzW^+WnyhD8vLu(Oe|13~HPMB9L|vN&&cnYDPF~<d^$p{1>nz zKUTke_#a?L*v^aV%sD-{i<}Ym3+x!-l$bmj!0Pg>x^ei?@8=oi1|)g7&5E-3)9zsh z`NJmOu#toDS{XTgT#xiuJYV_;8eI)dCAoCFTopEmy*@>;Y4iS2lKefr`^9qIGNCm8 zjpdXK{u|5Haeb|K_YB9{78=n4YVlw_nLMf;p)9!ug?N3#7gm*!8}EK@t_tS2@~#cF z;y45UMWbeT8fN7X1EvYOL4>{LH`pFj!S{V3v}*k?G#9H5^>q2a&>RJdp=K9koUJ$U zW)R))9k+#gT2WQ09DW}^V`eR)ICDr<U{}%FBy9dD+lFsj%pz~Mjrf^Z#WxXU-h3P1 zI42vlT@Mv8Ne>($JFmb(p^hm%R#N{%Ye~<S*&D_id`qawGY~N}noAY;JxJlxl){d_ z692N00QdhOxo2GW4{(n<Jcf>bw|<?Fg4$&8FM-3+pi1h>jnK68qmBPkE)dL>$>Pb` zQ8<{pB>&MIeg*g93SDpI?hezq++Ec!^Wb%?zDqjN7FEOWsxhVHus)22p`7v?qf<|v zshpBdQ^yf~!_aL<D0rV;#<|*1H}|Brblgr{GT(#{_Lr^TIgchFwADRqce-&@`pDhd z9Jx^<!7a;Wz#^SWvY3Oa%t%eX)OQjr3HE;djfEM2NDsO66QlpABCcd*^`(|I{~MBS z*Sb2YhrkZ~yAI)({AU^;w(tQ?M-;$w{@bQyx7mvB;(fgd)*XJ>YW2CYY;?ltyNCgs zm^xzJZCcs)UDg#WBeEoonEglJ>_9EnM`|||11Sb$?Z~XQD?HI61OO?Z7Z~l_>KXX$ z+5!-H@)ir;_R4c(2M;b?tI1<);qQJJe0_<@zxDQq9uL$bA`S;2^QDUDOHjrbbruHX z#Pwc9Au1qZ3S!FLVs|A=0TaIYF@RR6uzY?X&{#b-_G{>5ksLt<z41J>h^BTn`6emt zcDm;qBQFX{51K;$sru&IWe<Oep=BZjs-g`IP-gvO#_$jxem8)9D{|Dd*a;x8w-v*q zE3S$%ps^?||2{o{ae><{TdsVpFF3FDcNoq8n(RRm$|wAX^3W+2y#zQq^1K4+hh>RY zEfv^GArKd#z{6zKT6>%V%oQq!r=CC4l);KnPrGXiuuiNXV73$A_?upjgtZ|_`vvHM z3c%&FIQL%lgr<zI>IK8>)f<Eob%d4tsE?xUs*<*bl}->lEq6d?2jL2`hTI9`_7U-8 zJ_-Ay5=E6UN2?24!2*IV2lh@XwmEOX@%J&6M!SnmNmv2KCli!wZ!}mBy>Hewh}b6K z9xOhduo-rYVLKxvynguHj`w^a?XrSL0uI4<tE)@8o4*W$<U-!VC_&o@?L?_NCJ&e$ zrYIoQ(!9>y%wrkB&w<0KXO%6T&`*;^5?qlqaIGmYs$0oyzxlNZrXNHBNQtFeV`{rK zMNE{E<~wEnX6UD?@{^kP%v~eSrlBsD4s*}d;;%LWxlAxX8f8g5t|}9WF_xaa0#mjk zr7=h9kG8cgTxMmwp@^fOWm-<d`&(<M7C84Vf7O#d2M>oPAi5`BqbHkot}%~<OjTUs zbdZZnx7{C2G9<Si?D*C~sA*cw3SomB-n-WeN@_c-!2}o)dI}vpWHz8EuqGQ899Kt# zH<2n!qx~^Kf=iYjhLtF~6xAx+!otBlnm_tmgxJcG0-7LaLuPNv*$crD^}Sy!#epR! zl(N3=@X_#%`##zIgBP;5pcj+&vmAAM|IIqLxk~p<AQOY#@d&XYoxK!r(<2HC_^*)( zl&&7$MljjWXBz<rD4M4~6z1{gS?`}6D$+gm$cO3>#(wQsS-$S&FdZ}aKfmD&x}Cy9 zwjaiao!q?kr*6sRaDE0M*stJj+B#+F;TX>=m(e8i?31p%v~Af(=?QtRVZpE*as(r^ zK7|-j-{>5%1=FK-c`K(Fb8E4BY}9>1+a)$Qz!t#GJBhD<N$z+t8_`O^83P|Uy~(JA z7#YN9$iq&u=2$@KB|cOLB++sLnA!4t7)>&Rx172JR%pn!<d!vkl8@EdrKVBDq}A<p zEWNCU5v1<^OPCplyM14#miLT}*JJEBt`Fv+I~Q@Xki*<-Q76Ut=_X5d`+p2EUh+%b zZQcsgnu}*3^=tqaf0ILU=3T4=EDTvCEf>#PJfYr(XBChu-x0RNm(*z0$MiBOvYYcB zy^7LM!jlwd_ErQi8@T@Tnjg4tsF2K51u}lf;2#AtW};SDtb>E~FeHXfd3HuhdnR7B zV1vq1k7HXVIc>DQ?74(bV1UZfEgX8sN7js2$`TW&_ci3GypsD}Jh^p9lAu)EcN!5> zNsJwtQ|qsGqi5@%1+9ej+*rq9&7lf9p?~~wji=XUjwEQj?U*}r;(7~O83$nrn?+%m zk;t?R&b0guFF-3_1^t=u5E*>lGhfkCRdL*<&%7!ul^M<VMAj`maC;+80Ns0<n1ucr zg#p%@HHJ-Xx!E@fgwZ1rHXxm5i+OOiY1gImDg*apyV6`e=LZL%tK#4-*V5%&kZoMD zz{7KSYXFbfqMSysedYTneGcKRvaN+!E)y*WPQs-TgSC*(^yLA&hQIRdbH!-@3OvLk zM45NuW8fg&t08m<vDVwW!)Ni?`xAMJ{$VnxgY|rb;KdOMV;>Pz5b(jO-!%8$!XZL& zv|E0$){5LPDn{bqmK*gd5n?`7D`^D>TR114Wl((+-I&5Y={&G!GJ6Gsd?VxK9s4Gu z#tnzGcq-rb;qqB9!;Kh{BfkJ!q}<ku@H!^hH^z-OKGpSqK$U^9iu1h~z~cI&guS;H zI4tVywJF4ya%=QmON&2A2H{G4YbLt_8G5cb50^un3TsjFMvL0*GbvrY^n=a6Oyoc? zxO;3!eOoo9;tWhI`Z+IdI)QF}rT#m>h?vi2ds1P`Ju%qs9&K9`4aE=)hTKwbDd=;m z8n!o~uA39)4orRWXez|G<eSYi0{#?ai@!a;_=0=AjxEv&Y|47YS?fCQ*Fq%;cAYTS zp@$$~+G{JPpN*B?{;}Kkj6X9F%ICp%?0DJ9*AgN-qK3O*#v-?(5S@)t+1Dky9grDO z`st&*-}3)4B0c-DK~XEtbpb}|8h!(ol~i@G&N9Lf%64Wi@0AtAfFP6tWt3LEJtehG z06jz^j^TVAcBRLtA<?NhR^MqV;s}Fz|8HB;eKAD!v|vWI_|kTTyAZ-Qu?p3wKup1e z1L}mJTEmDxMeb2JG(BLdNOd93(S)W@65C^NkqU0%K5Rx>s%oO607~P>&4ItY5zM`P z<Aj-HCE4|OUx~wN#0Y+t=0^+&71E-ti_QvR@U&=n03qlDexO{h53{aC39DzdfNRm5 zt@a`^gUjm|MIr3M?7w!%7Ai)7a;#C&0{|KVO1NwV`oc>dqS`Jwnr%WBmS~%oI{m8j zU{JzWA!8c~(nd-(c!o?>7S>Z$|BQ`|?x+GRWL8VaqqIHPWNSvN3z}AZgY1j*u$%w! z4iN&7$?B@;SS0p)M$apRDTbP4pQ@r0LsdX3GiEoz(V!<cp3jORb1EbK;rm^Mj>vt5 zg;Q1IH<~isLvFmv@K)S4_(QCZEsk*kH;B+n;XY%g_m)E8O;7Ma0A*mX!>F-oGtv3R z2d0dpLXw44%5h)|y9daD$Ws?@p{<_6Drs?e6vARVrtvPEi>~OWDlK2&rgiqe>F=DW z);<;5my$REWLd{P9gRB?eza9f=b)g<_%||e1%n|xW!$%fpo7Wik%b88`Ll6aw!T`1 zL+}+znf}LGGWT{7voUC|s)(2vrL^TgtWzy4nN9_6cFkW+k<QqxAuaJ@V6>W~m{ggc zm^g-&$n*VOKmX*D;?F?zddJ#x4A8;jd4cdEtEQg!CH2M~+Td#-OLA?w|3ZZ5>G1jt z;^@V#%lTA3?0Sa+k@Kssa<l~f|E;t!`A7li7-IjbIgh`i1{5$Sh!xo@kjhHzOynnG zW@u+i8zZ41nDQDOo!;1xW#ZhwUmC|x92LbekH)@26PVQ_bA*#<-o)D%s7l(B(dv~N z+>#{AhqG&>m}vyh6^K5LUxUL%AH7V~wJV2VB=&>{!!pkRYj1`CK}FkLM{kkr_(ST; z!kJeH3(W}qaLQBThWs3yVZw{G2Sg1%s9s`Wke}yg87!EaFaiMYo?r}RCDSi|NdZ!> z+BMJRg5Oc`Z<)-ri|eXaM)fezRH#s)Ym%Cz8|S%GMyS7%jC$Y?h=bfm5;&^KkP~+G z2>%2`7SO8Du|$~49hm#fME3sTDIO&Tj6ymQWgFL<%niD{(zE@a!UI=TJeTg@D?M({ z-=GI&lP*{D8G!0kt3l8)C~Gv2PiV=D#gRORx%cGRN3@-)>l?yArz@_Rsm>4{$d&6S z8XvF!<X84B6)M<@#-hG59wGf_nE^6p`3<l9Q{jG|DC5;Rj->RPS}7ERs%RdrzpR03 z0_lcffW7k-#ABd;C)-t`fKJ_oRAy?n_C&sWrC$dB`oC0?-9QlE%?s?w#?lqN<HmAm zkbM>@8GZhn`C+|zo_#24F44P;GJ0U#C(b|x!of}>%?31*Qhb`+D3%5u=0^0i85)iL zSM7N-45Qj{J>qkOf<C^-IB-LERXp#l9%9=ce)wf#Q8o;^)k*ohhWjzKB5@DyglF+6 zhRkUbTY9*zA-l8uSI8&)H)0@rzBS)PMA2KYd}+`xNQ?uqWH<ypN5VO}=Y4c#eOS}v zQ{Fpj?!J$BMaTOMrjVKOTxHSSskK#+lUMBcmU41l0~nc~OgYJq<deg~j=wSLDQqwT zQRHjyMB&;Rf!NYx0{<iZ2S!g9PS?y~;a*v1r=}efBG$+SPL8kfK^5u9&X+7KUyuS6 z_^eJBQD`_Grh)q4nqNTFw_nYk#)O1FdF@}Umo<s}0e}g#ey<}b%k>FqYEE-H<d}GD zYJPpc7+08J;0S^dmYs+!t_DtZj7%yL*O-CaGI8~)*o4sLqTApK`VgQF%qRNgMON{@ zyoeR!kVJk-^ce_q)ab8-MN55|<55}i_*)nuZZkb9smfw+sFv*<`P`5MCf(+bgWk`K zt83e<f|No{FoZi09-;D8amYV~Mg|O?<Rc2jEK=RAJJ0yCYbY_iH?fJ)JgFE$dy4y9 zK%%$MMJK5R49xQ(WEq=AbC{8Eb)37WFNdB(Lxf&*XL^dJPWQ%Osvn~_eg$86wGNO< zVMCX0ulJLv`Hf7~PBlfzc&$q~=zZ|;at*|p!FuPrL>PYE<v$itng<Go+H-vdD6@od z4XGMl+1uE@!cAawj&5f<7UyU~FN*l_$;$-uhkTTfd_5_gI{3)*#&nt(G7-Xfx2_lO z{hnPV&U9Wp&g*36?=&C8rhtE1xiRYfvbc=$L6ZzRpP5&u^yu=Of<IR^xtmYwLL*fc zNnmEaU9##FJ8-Gr$bL*G34#PHg+&}f_zC?Tv>;C5^>Lr}1Z*YkyV9_>AfWa|f&>IU zi>&hMrcs@v1wPDo0Dyx-Ug@Va2FN|VYz4P6w(+J@0kL_&>iz*1ZR2%E?NytJb-B>* zNpk-1Qds~TS{amDJTt2%oUTB0V>0Hrbck)$a~ca_1M3Lb)2QPa8?`|ZAz2{cjOeQS z;9j=911Ih4%GO9@XkPu6E|VVsxL>A<JwqEkmAtmhFpofT{)eMY_LV^R1|=1}N`R57 zCu|#Xd=iq^)~1Hx3r#{zxyiObB+!VP=h20ZD4nOj?ItqVLi_lqyX_YFN4f-V$%L)2 z2e|CTkYuIWud6XtF%F~^6qM~)LFO=(5|t0w-PooPTmR_CpM?O?G=hYsajsyOmGQ!7 znZ?}@3=nL_GIoLZOnMw^(L-Jqcb45BMgvtkKY*pq--<HMSVa*}V8O>Lft`VBTNjvP zxfl$~HO+Ns0y=CfidQ@cYUahZF1vEIlN$%ob&ES?26$k8c2S=9O~EgjEy6$BL+_U- ztRz*DC|Ed&%WxKFH5e%q$Iz0HqQBy4k(@@JgiDAE1f28^;5AJRYMp~a`yB8ua6gph z8S{F;7D(k~Nhh3^So+51NMh!a1*@BzdOpfWBuY|;L%A1{;PG)^;^5*^p(K<SJ^(hD zFr8rcph6_`@b(AO5LB}66Wu{B^--v&9Ppa)+m+~u6~@?GPz}BLwNbwj)p?8OOd7G` zjG~k<RuuC&USE~7R2DMD4voQbI-d9kjS;$zzyQI2p+9zQ-H~8<oA=y%8PIR){a~jz zKY+X7a)yi|0CIE9uuKgqG1b#~eAEeJW~=z{ozpL4r`Yg_8hy^gFhx2})5DI?3|&9s zU2^3%WVdF>)}J6sC6^fRfQ<Y}2NY4Cb1A(wwDHO7ZOEl2ka7`SfO2;1>#c%P!5t4L zy%*NZ!vRrLHys#i*AwPgNL<pu^^PbLj<M4$OlrB+4G*q`BPf<VSrp~YRC{SWIE`fl zlpt`(i(r=QMoNN$m}$#fvuW*@QUdQ7NX`zRTFwv49<dxB0|P@tq3jir-$S)c&lnKh zV5Uj{xGP)3#GyhVkc9(FXiOYocY@Ek4RGt4!j74u{!3ZDT3aZ^IJxFRXv5r!-UJ(S zlGhhh!cc7cY$a+SxqCZ!YU*;xiPa~B1f<uz*59cFeGTe^SG{qJoOAYi+DDJxMj~a$ zFK;&O;<!axexdhV4`*Vaqa!oZD9<4+RliR8DS<|n%21^iqbJDiT@Vv&&_Cu0AX29M zLIW@|?ERgroisNdO(I=lJMi8Gh2ajr98k5*Q649&w;VA2Vk4!Ylpq93((n9Dnw;<2 zFcHgSr{~(p+r$F;VB3?RKmMf-U{VZ&Y7ns){^UGmMQ>vd0lvPTW5$eiv52<9Y#EWF zN(PK(Qd4LFS+zo0X0cEu*A4P(xTWMhrUj8OR{8-lX+errlyV5y{MIR*r84|{{BKjH zAqp**KMfC|I;_}b9I)eW$=y9A&~Cow<=P80g<^0U1SAXy&857h*uJQIDbXj$@^p9e zEHvjI01-mbTTbT=#;THdJ>M_Z`3YeclI0aUel{{6Pd_vA)K}8AHMAiBHVD@6<onzJ zS=s-xjkh<~g&umWUbsv@alTP25EhD%r<?z%s~wO|*^OJLQC|2n{V=>fUWhq<)NCVU z>sl)0Grq!h$1Ga#5%%&wh&pR{mw=WVyG+{?ZYViIXcxn=antYakbTxV+Bw<rmh~@U z`3YbsEs#i=*j{mj%eXn|$VJOllidxT|8LX%MlXII=CgO2IE1gox9oQgKzRNlc{pvb zC}#zt_5}B&1g=TxBZ?T>u!?$^%@nsv^ub3taazG=Im}VQ^i-g-{~vwK;Qb~bGty_{ zBw*lNIR%Ny`49#h=XKnKkNgYB!IAh|NTz@_V!?|bKWB-OR8ZA^vzgLfika=Zsf1rJ z6#KtN?LFzKp4(;l_y8?FF!({7Z7GPISut}QotVR3#wNMtO3Pe+J&32Pg62qMo>a!i z^VBJh3#r?|Mbc}}{h->=a>aijSrbp}Dz7}*rBJ=|{uQU*k7a-$Ow%6g=PlSm&J|&a z{S+CdVL9r!YuSJE`x_*I;K7El$8NB}Z*66miG=7Y_vu4Wh<XT(w8-NLI-MFj$b;p9 zSde96;DRDzb1qFs*3T+^hF8iJrtyo@aX1^Kvl7e6(JCgRs5@VC|7-+r8pJ7Y8tl}H z@7NWWzmDf9=(Nq?0A<cw-rs)@kd*4}45R&w3*2n=cC{gdd%a=mY<|Gk1BX$ya@oKa zgN_<!ox`;(DF2CnOF@N*7leigvKk{-Vtj5zQc^sZuMt&DffZQrOW0bup@Rb<&q_5G z?Sb$?E+NeXE@RYD6}}Eh2IV|X`u8v_t|0l=Eq>^S)5DYB6?-C8${W0A@0<R1vx7D^ z@H^xWV`ypQ#9}W^*hcQ4k;nUvF*!26adY@!(c|*8ipxCFqc7*u(5z(W%HiKWT0S}< ztvQrh)7dAhDVJ_uN6>*)P-bC9F^ZX@pDwHogMx_6t#NdGW`>iEasPa*9X`DMp2alq zXB-iSfBo;tKb=WR^fHMW&zM4o#$t||R(Q_BzVrgAnE(IjBTv^KQW5RD;IilU-wW)r zm;Y5s>V{QO3~gX8;t*-L5@a1Qqit*vbT$kAGx-w|nL?_Kd#-A#=7)R{-#Mpbn6^tB zWOt`5a`)nMfR*F$LV_V%A^x|C{7*T*&}WbXpl=hnR$V6}0<6bbU)&2i7&ymT1UO!q z(!U6FoB59Cvg}GEB{3!PIIi&|PV=aZtL?LlMtAuz<?Y&0n;-$X|D}D+lqB7%bZ&`O zGMLqwyrXkSl{+A;hF<P#{0d>Yl9HupWWP}?dCrLtkk$6T>4%^?emKsz2ICBwCQNgT zW)QiT>Bezv=#*v1CJ35Ye$8Qoy|0zdv7xjrJ@cLtb7&ZjkbOI;w3v~X)D;S_jNTp& zeq}FjrrWS8LT4glB;K}7n$?9NoOyGxdqNBmOtv#JEO7s~X&hf9SqqQA-(t3_4>U@6 ztUMwDWeh>S08An;+sri@U{b%*q*l9qi;kY91bq`O)~z|pUTIl)d`pfnL+@e{9er8c zgHy#RnY}`s-eFO5vXx*(_Wd>o>BcJ*rD*@`n=m2L^r$kKf&e^-%)rjWgWUp0l=}PH zXMxv;aJJW|KgEr+92!oxWx|$|nNQaaKEeSI2Ww~Lt!|_U?LuBZuRsiC@G1X6K6~Q~ z&f}`PImtjP1IN>?1~RFflA}L#OP}3kj2A4V%79u?)^gVq0J|+c5$e~wL?<JV8orWF z@@Ip2*BD{Zs>vgyN}{jx!Ev)HYz^)_Y(Fu*PXk0S1rYxMcm$|Y5u_M%4WYO{1&Om) zpQe+kGz@zPVNs9k9!QVHgSvn#(7(K&3AP2x3VCE_3_%30rRjxgoYHe(4VV$be0&RK zPIf-8QsCtz75b0{Z+#$m3}jB}*KT$YKX09aawVI=sL_@KwwVYuE~5W?-1N>_1mLmQ zXzMKR>zkRfPcNLv&RJBq14rKKfX}jP(MQVQ#-LgO=;{l|hR3bg(T-)3$d|l2>$6o< zl*?JaPEFJK>y@_=lFZew?@UBRXI&2=0rNykG;p6+W5Ys~I)I556%Aw-7oDJi3l+UF zYx2Rcpym3H`u23u<dXCQ5@7YQsG=zE-~21RNroHe1RYv!6Z}(eSHh8^7W51AsBUWU zzmtHB(Zs~<?F{G(dbth^HoX~{abg)ofb&dEAtxKPZOXi|AtW9&R{98-U*B+AjT2r7 z;nEBI%<2<V|45#7;)%Rmcg;$7h2;VMul<$UY+E#++50~R`Atnc1#dC4vC=7q2@4NJ z&>{+~CGyNymqgN%o^_cTma5-N=q3}8l5sbT5hAY_Liq0gXmGQFs{e-uce<;;;0*Eq z*5G!!N{(27!bcG3=hs3kd*$d4A$fY%z6YI)eh!_5B>CoJKvh*GRoT=}OaNzgIn~0Q z#+@a+?nLao_TTV-x7#^>MJ2KPm_$%Rd3+lDK}O{bAtq1%cu*$uzj*HVO?aqpaM(Nn z077bJAnrX!wcPKVRWiY?zIosmh=tfNkr?j1G@k?w5exy$@qnJ;gvZbNo>n;3gV9lE zF`UuQyXIyt6kwD+vW9V=h;uJ|9AN3LWxUE2Xm-VRd=AoCU2=f>BS!QANxEkG0G3HY zzV*jHx!tw)ve*(2->M$t*D2m7gkFI>#x?X|Q5QH|p;zfv)7KY@dDfKyq@qanjIJNO zy>h+~9mQzz0*YqpN}j306mVPrR&L&OtU}l)NNKYSo7&@j)RdR65GQCQ^Tk~gx#;nl zz-GxS*;@JGp9Y$(_F-(aY{i(J7}5k}hl2?u7|gJwvj_&ORL1S6)mbG*v|6;i!Zb5V zXm6O`{~kmfT0O!u+f#ads4cW$-Hl5@Ajd?J@jRN*ySqw-JQlpPuCSd>@dH2l*fDYZ zgw>2--+6{5-v>acZy$t?FNIc)Prof4u>_cp2nEhCZW{sm&XN|fucj0kue6yB!_v>c zt+xrVse0z~E)c$_7-qlVT#8hNCq_BXtaCE!sZjuixL4)LZ3Msi|0Oc+_qhW&ty&}c zS6oG^Std%0;GLVNR#`P%$Y3LYdU|jvR0RA5s;;x7Gjmd3{1>K<1-shA)K~0!{5JcR z79~qspNPC#8;Y38TihvaC=hy_fOxfRn?<xxWl99%??f#*W=nc2cxr(&GKkXi(c9PQ zAQZMoFPvMN?4i4U-1sA6$+wL6B^jU>qwB35|G2b1O)UqL`PRySn0m)dDTfc#g-bVN zp{xYR+_*PASg_M-6B8I;fl7%mAc-u)m}8tR%5u*psiEENWt+QK$z^Ul>~~JTKsgp+ z@Tm?p4h}wB$CH963#z#oMwoA5-LC%`F{XI_r=MV|GBz0_yIj;Bw5F@~?z?VWdw)3@ z36|4&w@KSb5Z~fSR>432Z<94&p~a(TIJmi=d~kHSV{qsN@RPxiA@`%7Zh!lTeckZG zv?mVt!%Fb`QRW&KEYcv_V6R>y!3IM4^$0v=qbN!DL8<Xiu~h&VMyO;X`Q^J^!V{f+ zX+{0x_tOQoN6~q~p`bV}HIPHH25M}DYZga1i0uth5GC=&>g=GQqkp8|0PW+V!evV` zfWX5MqMNLmJsg}~6MnT%%B~hyzkSdu<3g`+j73fn0`dXqz6`u@q9eDTU%NoCwX`*4 zr>cf-j?MKyl>`L$?<N4lSanYCm-vL*w5#lZ@#aFxEbxW>N2fHisS0lnx7%%^H#5F0 zwBv8Ub}7WfrG*VG)DyEaBUZSDbaNxe7~L*exBCTA2oPJKw#$(imkTk#I(U~G;m1eR zBnh<tEGRW2>NgcC9lN&qE1{<sT<(I^Y*@o+uIQxo*fl%wn(Djt@?A0}x-kN1KXRw- zy=S?WDg6GqW*<WgEj&>eX2tgY`^xndG~#M=Y9LWy(ne8VKZ~70RbSUlqhMr2FP?Bu zYfVfNHocgPXfP&^P!lId*utBn<Q=pUk7@n<kIMhZaF$&i8iGj@?~NvGg(crqwuwNS z*-N5+juWl5&MzPj(GZW_r#I#DSEbE7mxy&nnvuTF4@zu(<nfoobNaKfoTM2=kKv;^ zf+u7#HP|jU_oS5EG%0G)lw}|wNam0!xO4Sq8w{B?Aih%X!p&wyDfu>7S?rxM8oyAg z$%{@CRtO9aCcdeB4Fvu$1z<we1-gH&wCG`(kdONvUVG#X&}M;n<2Gwy-ztiO53P&& z&|x;HK<(t@pOgkGWeb7=J*AR(=Gy{cb{FMypA!4Rn@h|KeP8VEqcN(Oj!fHv9adP7 zL<gVWp6u;Dua80gG0NuzK&snnxCpurNjdvE*=l3-$4Pf96%Q#u<osMRUd-<PEAhtd zV7x9>KUTMZQ)?v!B=^S^x?#b3T((+If)S+)rI(%o&)6WY!u;mnJ`HP1dm=*T6riB1 zhrRc>??HR$k7@%S-O>urD(D@Ow|3lS5AVB&P$d|=XN#tGVX4A(M8|*;)uP;~&ow)3 z<a<FcGI=YSg9GXI%yO&5%FGB!+c&&Pj39wu7GB6mu$*ScBiF`pSHJ7oJhBSb3T=I) zl&_DwVHZ>0d|LZ+Z}!fogR>`ajdy&u$C2GEOtgyRrKZP|c}>zfPYg=5Vv>$`K9B!= z<qjr?QJL{VaLO0{?lWppuslAN61so#;M`76v=p2qp5oaTpC9n;u<|s?BBO>T*e#TG zi_|?@Mi)Y7Bd+gz*tbK(xhA-)UYqoZ70<b0sz-Eyu<a26d@sJY)yGsv?<no1nF+9{ zJICdG%eUG-@Is|ezY-rrWY4Cpp~7B*`2cKo$AegyrO(NN>-5dk_L4Ry+|QFikftO6 z`yhbpAW~lQdRAr*U;i@<%E@Kmo8LbzE1wcsU+LTQX-!B8*p+4^sk5ZN=b<ymykW~E zF@z-Va?Ct_%4<$<hcvlxdQ=!fDq?0aSKvPk1pv)UkHZBfKM0InvolJ97)Y@Y74j~W z-1C|p`4_Q^G@;BGD`V&X0-ykoN=bE-y+j=T8D&tGSESLPJ3?3N-(B)g(^X2WYIg3M zx5yrLcTxl^*CGfet0+8+%usrH4p2og=vZD1ojwl^zuDOtMg>$v^uK~hQrqamZ*dI? zs({lQCZ|{n>m^G&TzyIw%R&&-dgmS7?A6wAxc5|c51uTADm#D>Yq~O#@<48<Fy&@K zuNK1vrYaoWLVVXkSz`SFW~->O_4>{0od^6iO+Mlq{`2!@gK#yR&Fc=FgHlNgvRfFt zPH7pSqbY*`Bu7C;R`T1xpk(rH;4hQ_eax&#G=G))oIG>351g4p%j9{MwSRImRU!?} zGV<6(Vg=MjPrI}A*<eoC1tRfSKbY@l8q@JdsR4~uUS8URl82L-6F)XO+}=HKB(d_P ztd6maxw)96!*KMOhd#B0t+{GpVphEa&1H_X5rfY|SDT@1Sv5ijlZn!h>|#p}WZLf0 zVvPx5jHBm8?vL@t@JpO!gaBRwK9wOE*Qm77iBu<ZyjDW4bsewq@w6|N_;0V{vRs|P zWuIV5^tm2k(y(nt<W8((k0RQL^}btYlMA!Qv`bAPyHXb&?!upQJ@m7sPacdLq-Q#* zxlQ=id)EuypLJyyh+L^6;!6oY4}SjP`Q>ck)~Vk>H{R@m8bS))5jXY3RstE<caTj- zGTWF=qB6&n0{T-kx7IkF6m~4O&gyl{Ip!MEX|hhUOAiJ!Jgs0SzV|T>Wv*MYu_G@Z z0vp|JFfXZ8gv}{gX~ifO=zbOPmqPeN?)_R5RI&i-detX=3tmmUL9$A24_!F7jpma! zUTk4^jPk0ble#Bl$hLrzg)9&5F~afZ-k3Popq{R-FH>@T+K`cz&}1nDa%R{W{R32S z2Y)c^IsS2rAi%c;{oO?5>Z*4)&H7Xr)jW79?YvI&F`zG4%d2IAV$=W;Vc$=m$9keJ zmL|P2@gSkSLUSQ(X8_!<>4qOsG{WUUaA;;WrIU4g1GBoXWtuU{in0JBTNYCoci8*s z!{s=3J_#ocr0`u%7XfzAJs4}J{3ZlVBHy9l6`8x?GIumTNPHFi08km&S*XYnRdjUK z-gvb4y`|x$L#!{buX?ZmP_V?xxhsT@EA_x`vz9r`OGdpLSX#0Xy+`;*eFLpT$;$^R zVIQh5^;_2+cpI`4{5gq%9xuG3<rA`D&AC*3B7s4ESgCDOiDWJ0ZiWt1PzJ&T3=2nJ zcX<Zq4b3>G`l+7|^=fO=%hDNGPyvGs$H1t$LMe{~zenv`w{qmLt=G9LagI`w2t@ux zsC$s+C4C&KO1dio)_(<5N_&j^a}_)Kkr?Z=l5GSfYWV&}n0Soq_Kn=j8PUgOg>zua zNZVwC6v;rCHN4A`BnuG^r5uwaHzQ#vCA1LE=?!O;rs-x3lR-l_1Ujnp&CTHFRG@1C zU;xfq5TZB@^<`FQqG@jLt1_h7vu`W`<I!dYx9m(oDTMP?6HO*=^VDadvSCy8Yt0Ok zPDFRSdF~ux`EG$2!f8MI9Leqn!7JPU?uboklX$gfU@!R$T&*c*J>#4UQM>=eE<eVj zy&%1?Mb#Opigi+CBDn<rOCxNNoQoMUFoKY+I&T^jTgdVPEf=EjTp6xrAGXYLb4QY_ z;D-!S79Q)?s9q)}3wRv%K?uP{FfLA${2OOg#9HAN8FP|7rrFYQ6p`9OK!<!LTc~bZ z1=4C|2JhN=|1l>vlU>}a_U^?zy?OsBzAu&ASOyg7f2V)Bfz`SZm?3K3Sz*n)M}NK) zLUf+TR`udela$ad$92SSxB_RzR|C{<FjfM~G$4JLS8~n#x`lXur`p@$L;KA@?UI44 zRMRou<@MVn`bNZw{vox(tM~kQ)MWB(ug4q%F1nj~1#+{FyS^xGlB@PSXde8TK9f-J zXTSe$qm<+JW@gM4I341qc15hSdsAX(Sbrg+qjiPqoQg%Sdl|QR8Mre|nYq|3m;&|w zf;pxiA8|xsh(TwmJKA!3+bwUNEd1Kq{>nGgu&%=iY&`m?vrXq9=}`4!+@6;&{rbdm z$I07mA)|lUkux!6_jqAqE1JogEn`}=bfM4}l|+m6;FAl<VR+H33-Swn{1+u`_?~1y zi?g^9E+Tjd1;(tN?8KgBochVVX-JAHP4RnIs}{A$OX9L(uz6NDBbstje{UbIl*1jw zvR=@yc(?_5Bl59?`JLz=hvE&xqka8QDnG?dD%sc`xQfK&@~TOEpcu7XVjuEp;5lq! zQqQMnu)YV)%?~oUGjG7_r|4N3kJD&YvrmL*UZ*~9F;RQl=j^4X|G1qP{Ch{%dlvv2 z6<9`3TwIbGXW*h4p71kV)bC<LBtRkflQ4sg<En8`g+;>1ZkRh3)Y#{*7o?{J!D3-b zDA^Bok_Q4;fRA%?YlUJ}xOK(ciCHY)fOHAIpS49Jz2eoO*_Lv!O>-Qh%Z@2#8+Y{z zF%dC42+W}`#AyHt5d2oMoh#H3oG^lR&O?Mz2S~R!wa_;!u_{LH>VG@ZPsk1fp@AEJ zz!$K?pY!GiD3wA98;n9v>ah2QY!&DlZi+tz?saVNz?7WUmbNB}JkP{QjKJXy5~4Tg zX(bo{x<iBWk1p>?-q33narsMBBgKv&T4qFj7cXzC@JxULVuKk&IRLoBFr%V6&!&6v zkx-^LnYT7tV^n*~>+5Xu?l!x%Pw65De30Z2c^n0G{v=iodMuYj4*D=2GS0}YQo0X% zp7LI#E2n7lS#@ZOsBn(cra1k}nq>UjWvmxt`g=J&^aN=Zv-HrdfDP?tsNIvWRiTGH zAvZj_HIyX=AiVcQ$Pf^lL*x(wJ7yXQFuoV@;$UPGPlhB9GX&urrfY2M-^ML04%fZQ zXYY1y02|Uw15?AZ{h|BkKZPCqd)#w~P>8~@eb)d<5QjRE+nc!A7fTh4jnp-WWbyl> z?wW`Uid2@g<p`fyBYbf$a1q*U{Wh0!-qV(U8B{dXy|T6$d<8huj0bTfAj>%io@0+c zW$UDAsnGsZcomgPGZxl56Nv>!u?0LXwue;nwSaNAQYoW`!+?Wg++R^O-&{qDW%G-l zcI0N9qa{*{&w+tp(5AeuMTS&{+t~*$D`k~Ig84qLlbOLpFZW;*f@e_tAze8G=-!Ai zNYnOVt1v^Dqthh}QxqWSXx0YtRJJQXY8+2AqcKfZ;iI-I`QPy=!t<z2m#?3D-%42l z-4$OF3FZRo$X%omW+UrXe^^uW6{uwn#9ARuVIU^U)S?14pC1v?ifQXKVasqY;2>1v z32(sW`kltM_(bX>i-R6e;+w+VIE4glMEb%$YMxPOHYylbFn#>7IL%@&$T(}agRYV7 ztI>3EkyA_0X{IP?!z=Qmuax+6g5-?tah^G^M(k7C=#38q)twUA@mejb1vCqhar5P7 z=5x|(g3|#4OsZ8jGH1$IhHl8yDe*b;5$F^7^7U~5(Wx|M1K!WMkyy-6nuAlKt@MO` z_bpI8u#+3)CWEo0!{Dd<P%cE?(JMUjox+l!(4L5LNS-Kpy-*BEr|WpgUea!K5;GC1 zncyNwBf+uC=le5c<-`8Y2_rGRhOqyOsdr$Kt&5g++qP}nwr$(mZQHhO+vaZD)^6K& z_wDzbIA7d9P*G8<V$L<5%#r!>7g+6GLYPIoXxdGk8)zbV9(pjgF_~O(e>ncgKglWF zytpPI-3&eR>epRCOs1P)VjBq?bX70SRPap<Bj2#=hZpEcQ(hLd!#{Wvjt4NR2*f7U zn-H|H#Sn}K6)N~0%%ohUj=hwH0#b<pXkNM%v}U;|Qjf%BZdpd^c6ypT-Ur(T(N?mX zYT)ZKPRr%&EVV(3!f~P{=%gsQu%R{qGBxb3DobZojYb;{m7ZsCR`^_<*p$*pH}kX} zohtPq9!6k!oo18zq(0ZCq|tzG0ON!M8X(&TL|{Ws+6rWl1(t)f*3D)BJm~9s@sC#X zxTRr=O{4vCzJ-SO_*Nj#d@skF6+EqG+;bq$7prDG3uohR1^qTpnj9<LNV;$f(%R)Q zY7c8iJzp*pB3YT_u$s<W5((rI&dFlgl^~QQosAL8ZmUf6PX}+_U%1n|tE1cF&+~h& z0a~d@>M+^X7|$j~wU(Q)I%T#so=LXZ9wW>~L4#Wiyxo@~Si5eOh9>3Mt}8S0Dzw~Y zOVLVD33Lu@L2y|3#aW~WVF_t$M?mkS-YzA3(-56XtDMshFj%r1+a2sQc1RZI@HrVa z?xz)pFgUO>S#uz`G<|uaa%lbR0eWfdH@}KbG7Q$m&_SAHm$^tX%T9^?0*qqr2$1;Z zy<y*S71s-+shcy}j+p0^b6TIZeORUDl#y{JMTIT8Gbf>r0)aW1LzckBA}1kd+O6nJ zh|J$xA@p7Igb$F>w9aCwa#hS6lU2ynAaKcyt*|mk_*}x3ZSqXK^~GGE%@>t*4w=mc z-uK8`n#|GI=^diRMqlzdbtO`}^(5<AMenB4xzyxfP}=i=vGtRyMHT2<DftmhF`g*p z(W+>C*%1$a<(LtVZACasS!kzyiynVv=RNxnBz9l>n8)J4C`LDRIz*Q%T`AiXp9A4! zEkoq~q7KCq%q;f6*;VuX7G|($`AH=JS;RLE4|nx_vB77TY|Z%9U>)ftSRp5W$VJR0 zE0#hge{nzD=X9O~H|u2u7$!`d&ez{VhGJZR%*S25W?iVe0(Z|b))1XPvZ6xDEJ)}S zBL-RIM}f+8+f=(IS>2N+;Pjz_Qfdj22c;3~{(@9wks-e|2Rrr5Ifo_?xnP~kK|@A9 zy{6QVr3X=hAtGaWbPk(+j+|z#tQ2ac^L5sw2^uhO$|{4QGUFY^>0<oe5Su}`v|p<Z zAS-coOux{u92lc|$XGS*I6IoGz=NJGogg4HS$C0XvQ9nK&uD8)j*b*Ho=0!q%5|g2 zSQRmK3S|ic>Mb00PkfqO2~;cOOwN~oqus-5`>lt8q^yOl>~ir=>Xox*Eyo`a)tY`Q zHu7o`Nu`jlG<VCK7<N?NMi3o))z}-S`^Vm}ySrL4{~_vyEO|Y}f?U;BWJj*X5`8*y zo52}DeXKZULQNSVG;rk)k~3l;+7!@*n8=f0oJtCf{rl~DOM!WxTFR=@ANh8^f`sgC zlf}Ph)t4?a;@XK7oXY*dfFNYCE_JK67{oC+7i*MXo|VWGDGXJ*5cXl13g(W(_a=8^ z7?JA%TY_t3g3hI!R;}6>%k)5@Df|U=Tz(=`5)M8o{(BiB=q>V6_!JCGGqyWD+<o5U zmSm;~R$EuGBhDS>?Ij|=XHOHrm&%mRUz2J!7WIp(o8b(Qz;i`(C6hMjFPey|=U3h7 zMA65txmhXsBUD5cihgM3hGQxe1H&&?M8_a~WeBOt)!o1G0t+$-)xN>oh<T~-3heI$ z4oygcEneH#cN@67mX&&=r<B|-N2`?8`*CAWl?JLAvt!(Od;9#UsZr*CeDjMyTMfbc zxwrmINS_tdpnZ-*b4HZc>#kzT8c2LVC&{F`;8QZrh@D)09}!=md^lP2zs4m1kM(k9 z2=JVnq3}-atGv`Np5!BC-YIel$<M$9S(4?=nf9P^+5_)u;!offDu?q*rkcg|_0gP& zSSMO*C8glo%~-;0<k-rqUJ~`?4oThb3gZpaCC@G{Cp0GCdyU5jDZf4k-}CuuaV%5P z?7w|%{k)aoXmaEL54D#=FFrV2<=@MH<UL!S^50LT%hZyQUyN(-IZZAt$)9|OM@VU6 z#LbD2<|JFen1eC@`<+NU{d|338TFifBW!&c=Rh#i`f}xK>BfT#7{ssps3MYDZY53D zC-juBn>E-X7lb%SBg8wBpcC3Of0MLKEDB1X_ugjq4NTEY6*7a@XuSW*{;vWWyBD<W z;tt5MyOTH~CHJ6)$wUMgG*!YE^_<5JA^bB+XIOM#R%TXx@tuKHjvXUcS9Krv`}XTM zgpVk#zeQn`k67|C4z^`7NX`&r@D^-?PZ~!N8+)-Ws5}gMPo50@TEx2>xE&J^oy(*S zW9esTAHPh2=bkS$KHF{P?BV55;IL=O;sVr>WYTbN_VCJ4{fM<)J6}_=)<fGf6DV}~ zo1XQtlp)M^_I4P>$zS9AXL=)Ft>Cgnb&W_3&ctS|dR4oofv-Wg#a^NRZxa<F(x&&o zKQhAcJD^5J@V#PVrSS?(*rEavuzPZ^P?!a^hT#TC3@5%(eRR5Ko^&@SgjVFmrzBz# zpQ%1Nos&fze%!*Ma6m|tAXnoy0r{0jMcA)!wD{~wUbw^YPA)Vcdn0+{MHkX#YkEsR z?G3FE6E-y<v(95=R*^8sK+eW{RO}b*12ZoZkn+$<({GEN`bjke(XMt`5jjn|s7X_b z9UL{j04q~Hi=vgwWo|6W)$oP!k$``?G^VwYs-?_}?Cj36j8vvvNA$GT@+|Vbq%)WZ z5vMbD&@e$t`Fw+oKA--&<!c5{l*QTi5YySDe}BE_s&6N%PJC{;1^eeH+cLH>909~? zjEn06>pEdE_?5d*bp08eq6huME{Fab5(fIMf&N24rV@zKUB7FB&uXY-OXLbOJrRH% z39Dfy816R!#u<(iLqk!wliwiOi>X?;+Y?BA?J7j049}~;IVPTqxazQF)2dy2=!U1V z?=@POIH+VvLC80%hHWA(5b<Ob93e-TYb~Wn`RgXMQtgRF`1p*sq&gKnQtgH5IMfjP z@H25`H8#@ijpA(lSQ?(Bd#NyA1vNs6ibBC<kRj8qq2v+`G>M{R?EMMED6kx3Gx}$( zH+^+;@`E<?SGy5i@_2?Sl=D2c8Ln&OM55ggE+tZh%|WTQUaI<&?Re1b*NCbemnAVU zkrYF(K4;W38pA4GD_G5zctww>dGdJR{EZmKaNFs~<#nSB348xXCiz(G1ZZo_EqUqh zm?>+=)0Bw?0>FA$TXU^n<=5W9(E?GGV7zi%4>a;{=r=Es_>|8sg1%0GwOE$$Oe68e zPBfVth7b@Y%iGRN^EpEKiKg`S)4OYg&n^~i<x*2u#djRr_*if|AIVP0okce+LmtTu zUZ86q_3O}5KkP(lY5bJhzp*jzt>QhB`xqp1EqITnoBL|I{7-ioRC}uVHrU2588nMs zky{<{pd6Bxy$Tm<r3nVaP721x#Z8YaGg;`!a}T8tK#=9nS(z##ylKx{>Lr9us{e80 z)#5=Z+l~ynb~SkBU@3khKmSch;0ka$f1D93IB`WPg#1s#?Nr9041-J$WJ6%!qx|bY zJ($$i=AYElb|b^%$L(0^d>!_}h7*Alr~ijlYrA@+=~(LOkJKN#MMKaCIew&+3&Y=V zGj-wl8}HE!FE@tn-I<=OJ$g>q@2Qkh{qwtz$M90B*z#UdmcxT<OjBu3CE#Q|9Uk?W z8aX73?Z4*|5;A^GRkceMI6}pdsf)h@>L5ejT@`#zI(=`cA-dTc$^eg7uh+}?WAzy> z3}#2sB3t-xLrBbTLx{=<Cy&eki74;aG25Cfovxx?@e*NGH6!Fzd*HKs>*r|K+*b5z zjnaET1f#u6z%p%eRaI+;B#OB`ZXM7s4l*Lyvfugx9~u;0Y2_G_M|NraX7rBn7MB`! zoEnn=Ip~n~n{T#Co#GufEg<SI@IMOf89ncNr;Gf*?@+vHdJLa|H8c9b;P?{oCerb^ z4qygzKE_+5%*Q;Ep{aB_-}6SCgnvyUxgzs58%2lR8pjdc&3z0}6p0m+fFIokg>-qK zBvpC+?dyMP$ebfI$=+NhAO~0qU_)4&v#*=)k##}RM$Iyt?KquU#|Vy!*~Dvq^Dobn z-dI=Y7<~v3*uL^jY|BbE-F;sr+ZLqfD=XU15F207g6vQEjVr_y0u^S<K;52&RaG4B zK*_vxfKPULY=<)%he3dgS6J$$l6P?mt;!eHB^0(}x7@DvL17_558$Lg6xll~G@pFW z=(k^k&M8yAhPUoWHz<1mF_+FDUlvA?LxQ|gajA#vz^_p;IUqVULW71C=5VAXHfT`9 zmag)@$S39ObA^;1RQLJ|qs$-?3%;ruMC8J;-Z<g}xFJcam~yvH2n<8Z8Qal$`&EB1 zQ>VFSm(71;8bWPU*c2n0EfMikAo9owP!o0$)S1uER!(YM9bSl$GVfp6nY7wEbDbZg zB)bUJDl5JVoMDxfv4<DS&T4O0;UA+*Nh%gfS8ofN3nH{A(Ucu~nXP#Yh61s99`R2N zaxOn3jtDAuoyjc*k{B;V1_1k?QsU9Uupj~!cJ)}6?dU>L{CgV6qr}r$_)p2K>)z&( zBwQi(poM7sguc|i!!bBT9i+R2Ut*6HXBxZQNYs%bjJoR3biN0QCnyEot~8sRXp-q1 zR85+_TugbBKDkKW^8fL2V=vqbZ%fjZodG8%=~D`WH_93OZU1NGJd+GNwm|+E`8qkA z5=o*yq)}zdqBUAmbMwEHivUD7&d2zT&UWr=4X`0so{w|pgnaSK`zosz-cGA&Q7Y#g zw-Nch+0pGlW;4dDY5wdH%esXvhZ#jV=`Qr=CC55n;MX_F9M;&d8)fuSR_>h0rD7g% z#cig~#sRhSp=ed^Yac%57U%6S5bFB_^=)cW=+<@u@f<^M_Hx?KiXOM}>-?0nuL4V! zt-VG`wnmzOCKE=>DufiT;14zNLra<Vj2l-Achh$i4Kk}+)v180<p<k-UVkqb(^|NQ zZdohhUF=%e3e&o(UMa=8eEaPfWYVmwUf!)V6zODlM8!<|G4<dnZ2y<PN1W>`rvB3- zXl%yX!GAHBlYfSjMHdJc1`ZC326xGp5?is<79-}hg%?I*x@El-+(8*w3=_*;)4)R% z@)JCrnCK<@eodfPV=DmWh!9*er1?D%yweAaEU>fC!2yzNyANywR}IE|A-Fw9e7FV< zpi#*@sqI~c{^72H&GzEf@0z?(nP6QPJS2`-T*=XXY~9W9HA*G%=(g6XXSd?{6fblF z-_jA_d$jJrFFcA1QK_9!tx=93ThE6Xl;rH(s3l6ezvEwmNp--cg`bGjBE5Bb-UDjO zL1VciqE@tN!*apGR1B*5u>}0jxey3jV@*mrN*&3fObfeNS)RDlRi9G!MTuCmd(oL% zmBy<JAa1$x6;T^L?z_tP=s@nOx(aba71@q?wKev_9ARd8#H4bzox!k!vmx&vkUXsu z+=g3HELI(`rj~}%Q-MvH)NRlMXxD5ls4<=#qJtY7eh&uEwBwPg`5ArcP8L4c!5{FV zP(GZ0`0#YKF|wE15Nk{FOm^Ln3GD~}CLE9hZSTohc&70YRZGXR1G`4=O@@+>I3NcK z728m%n-HRAM6}DEMKx7C?7zQ7jEqdnTbM0Y45w^&M<78``6Y!6_!RhF>MLD~_!hng zl6R46gaISe>e$NJnU(r6v&C%e*oB}3--_WW9l43d^M3zQ#dU;HSF*ZH*Othpvz^mm zOZX;*@qtQTxG2gb1l6UNfW=qrvuR5)-89dIwR{RxMsgA%M5+9gs1A`Gb6bb+uw2Z( z*fP;cF#}s%w(wcTKEWL~BJXLe>LRBDjcNLEY?fP!UAi}>NA)Ko@rZm&+4d%-MmWnF zwnFUE>*z`Yl{A&dAe%U(^Ri<GNm}V2EM@RU=`wVM(Ws0{H3j(7JSN<HOeeFy@l7r7 z!_CLXWt^d3scX&SCaOR4kMrUnP1@sLsj$MDCr;^Ioekn5+{Ao2^t|}34+I)U18|n| z4O<e3j^r&x&Zzz0gpUn+VOT~O!7PMN7JSeCr7wRvrGcu4PQ|)514_UF#ZFSfTdvDX zs<YGd%l_u@6Lkur5>Xp~h<a#loQjpt6gOqzx`DmLR9FrIn1N^*rxG-iCHW<CwXtB~ zqGe2T=4X0p2tZU@&C(WkCa~iCrDxzifMWyE_6uZ`WJ>Ki#IUgOkj&{ZNF%vh5bG-+ zG(5*crya<Yob-AkQSVDOvPj+FD<BICf-ZWAq8wg&I>;hLs|Ce|BR()`S?wd3W6(%+ zcN=>1a3>(Q{&W}54|Xj}A*_~d0dUseH{W;Qg|nWG<WaS|nIVXTiUrt%H9+4*UgL?w z!SICeDZQNncUEtdu|%zv45C<LiCr|3;w)ODyY-NOsWEpJ^Y?G*uS2=sHeORb-0uoG zcmr)lw7QTZl6*;UFV_q9qDA|je_Y$ALF%Bq;$^K+qPME(Zd3i|3Hj-K?fx3OVzDzC zeFjmj7=ZgI*R)<kZQeSTHy6(9CvsXHx%N=F!XqY75@QAWqK!}I8$>qpvz03!jfl0Q z2WK}^M_1Pe-)q`=ui*Vr&4x!=CNy40ZU~&)KA#P1vVQU(QYv@QLb3bfL;zK*-@e{t z!-8dgr5dSJev-;xATy1h(rKeF1QRsgwfQn~H0=`jSl9_!vU#~2Ms+_~M^5Osmo#tu zOHfXM!v*gc3CT$yag!s2U++K26iWHo13tlkdgv{n-<}e6$HGOX*GMaPVajI_e>A(m zz(nv1AjIM&h!7-YP=eg&?;U(jA7SnsTVJxB+XQ5Dz(1zURUh#xXEne^8fkA3ecr{e z3=C>v?im32dk;o_d94g{4pCC;q$pNP<th6H4UKFPVS@;tE?B=aCQpd6A932@??`=X zUe1}l=jFutax}oRKdAVM2I26zR*i)DcWEIQ(qg+AbX+bX$yyEp(<&(2tJ5!S3_Hh; z*~NMXgtDllCLLDdi49V{Nf*2I@y3ON0D3~Aj&DHU2gXBWl&sNo#*9EC-)?MFp<R@` zA>}?rI3UdSz6CcKtKad^RxJp=kwLa9K+=Khx8=h~LH-YosFXDD)69e{uQNc(m5B|~ zvlOn{IRoa|kX&kHs5mgmxQQ+|ZYy4jDpdpHE-%yHt;bTeX4i9ZbrnXbtK#9;Tbc~h z4i6|iC_&mc7px_u5xa^7FH;!j+4J9C5JsPUB4=l<imGRA^@cas(vN!Y-@v|8nsW`O zK1AGlxBS@G@kjWo(}`Taq8g*-W(+;pCpZW~DWv8KSnisD0{Jaf+Hh49jb;Y6*n*HE zFsMvG*zK8}x^&ufM~w_){7m!p8$5$s!@!_FMOjNM|F$}2&&s(S()1)HOB0;SNWLS> zq<7u}^+5#%sS!<+1)$I5RyQxEg<oBmDXdJTH)Pd>U8+t$eZR_91x%SD292FK)cPeY z`Z5Yyvf?y2siXFpVZd-#H4*_#Go#@NQ;!J#c_izX%@F&EAlu{X+((J7jwkp$nn>!$ z)O1r=`}r~g_3uCjK&q@1fpYVtX(563Ur`jjeJH+!^=aW*5*0t`c#lXhsNgK5oc4j} zBb|f%O@UDp6+I55M8(DD%vG5muS+Y@uPc3|UYvi_Jftq6d@M=byg|SsM%$+b{-%!A zArVME8}Wz1U<B&~)*y$%@(DzR6!d`1;yCeG35qcnZ@v%S8N-PNsE{Jm1~@rp=Si}a zs8~Bn{Emn}D_`a|2lgN})4c36e*hsHnZ7!_|4>P_?7&WmS}SAWsBHlQ-X=a#q!-Cz zaM%%1@u-=EMsBVfx}bYQj^yuv7~<IIZ$_E!x@j(G+t?Dt<gn+km<huqv6)%>sVYtf zt;@(R<tulI{qtUq!zJx`Ei-7o5Q<}!8kKq*K~sjGAh8&v&;+~5FT)QBcSsHkN53oZ zmZX$+t&5tR*`S|7XWCWJqA2QPkzX!koY>mg><45zkP5GjRWLmf!YS4~jI)Ti3(kOn zO}1jhbcM4~Z~ZydDT1VeGFd6+tb8ahMXEwo@TAfA3HB-qki&;{B0rk?kO72a`rGbj z^o~;jMO6-gmCULy0OtvZg{s8CO`+gXM0PW0=W>1(>X<vKS+~imHVIL#hMHPj5t%Uw znq6gCDAm$5h|)ZUXLmZr!Uy-yublxYntY#kit2ObFX9ggWI`0;-lAy2wCrr20d}hJ z?mGAbU|zuFb4Kin*WIgp?HH@@pw&-^wID$i&0BN_FrjHp-NH^gTBpPkci{ngrGQA| zypQ|+^GeW@fZa}p`?qUw&unj#Ka#MJ@`9;eNzKtMQ4Sdtel>K9oZ^c_^-`gq8L1Y% zE-L=1m|j!j(f8{XQt%#E&dqfkJyMcnhZjdjuP32WFtX@LCgqbakXzq>=uygm%5Q)H z+ABlj3HGnb!)Hu&;f7ex`kX~t)keHHa6%^mb07czV~`bSri392Py4DAfSMuYouA_u zf=B(T4BRTwR5?#Fytcmcvyi*+9+DA$-B8{ngaofmL;i>t@khK&X)F8jBOk~Vufy4O zZPp%saFRjokJh$AI6?eD36hAbYBiL>fuH4!^h5{FltnZI$&?1`utQ`X#@kZk%f+$% zHP|z?Wdo;SjOS#<;*&rugC17*1A!ooFqWzf9D~2;5<Vhz3r35!s28tddhFl1OSGOa zYm%C8&W7T5`I>|xKFpIDufP2;JcFUdy9c%_0>YA>vYu8<L&|h=*bTzi_{N|`oW{GX z$S)^jDqZM|v+kG)wQ>8oM+{!bGydrJi^dTMB{Z>lps3ml)yzJ}>x71<B59Rkes)tq zAl!XEoMHeZ3<y>;dBFuJ<4fiiDJv^S1DpDI|1#wyH*$LITX0kN%xb(pi0B>3-#%;f znaO2Eo+Lk9P0|?0aT56d!AoGJ{|7HC&WirWl$f|ipp7VV0>Efs4~R*p!(INl_+93M z^&ZE=OqNtNKJG~^{kp}(`n1^5*b19RC)^6NQf()?T`n0dhrh9UgQr-@n2mY)BY3iU z`t|n2D)K(}M%wu{EP!mH^X<vk(MdAN;#j<{)*PALhEM)yFKMhXrKeOTgH-sJWY%nr zhm38~Ts!MBsau>0xyMuRX=I3ECX@X(_~F|pA>O{r;lv-bwr=D41KI!WBaKPPJ~kZ- z2ZLlvdxw$2&A){`FK~szrW7Arju9(sqjE#}B7So@$A@gn)06Ja*pX+;r^Dvcj9HZV z?E=7E?FuTTO8uSnI{f*G)bE2j4BU(ffZwN3e`P@q*Kdwnft18NkLlC<=Y66?`sIj< z!3yND9FoYCwyf!cg9B7^=F3F_(tj<>!hj#Ys+8+V+;hx!*$hsjBv0N}4eOsEEz^&3 z#cCXo*LYo>COx~B#>(DtS&njpzp*q#B*jY$n<ONhdID_62HO7%FU7zX{s&$j7w)ft zM04gH)InQ_kz8cL4Y(S0`T{9COPoH{L9f2CjLL^uJQz%QLbKSY^?X<&r+}mqYY8}3 zHp0^0pbW&jxX^&?4&{!NURYR)O12ab!!jtfGWbjc0;&UnZDQn=6LQHQOs(gqmh>-_ zX#K0f=YWn>4w*P&O16We#>aGJv8wm$Oqw@Hrjf%^<XV5l>hg2p#KNeOF)y{F>ZCNG ziph%6^75-d;iSUV7e3w($&kl3dWxGv@dV{nDrI!TtERM$<PfTs0nJ_hH8Y*2c+6Ya zMtigu@FZs^W<~jwSb$7EGNQ=h8|Y{W6=ZuGpS8!rK~<eo&>DIcnKCPI_}D%M%H9Un z=I{ZT<urowmbCIZNLp%E*qreu`--2r1*c&jpD3sKf>TTVvl}FOdJSQG?-g1u|4_ji z@;&nfp(}|O*}9mB*bXSXY)ZKnx7y5KB!eAyOa@Z~4{ATRUR}ok`%+?~d2p$zKndp# z%qW9bg}9<2-1LoPoAIU!axzeM-J#73VWSLkqR+li&>CIf$}NuPjpe{UKhEKmR4(Dh zDCx@$D6H{NN&2&G+})b7M-28Y>QKGUWl${yS|X0A(EUikYE@4!&26z|+jkIaD)h%t z?#?nK+0W>g1}5Ket0D_v_HjGBNdBtB#1U308*1b>(1V|`@lCe{yV)Rq`_ze=NfC3V z<)boXk?Vm5>ZY+iYKVY+Uil#wDW(|H7fD<9V+ptFJi6~_8c?r6>yG2}ZL7D^uR4Hc z%SnM&H!!N*pt%ElWm2!r8w!d(^{--ZyyL5NFy#Px80_pL!MCR&ceeI|8LHX~Pj$jh zJi&l%!x5n2!<{83_!f%&4<|)7Z{*GGQt7VR&-(m%JaE?ZT8=6D<BAcYFZfZFR|L@D z!K1&WF}#(jflAUTT2$#?iX-GT<;P$1@9p`h^b2#3O5y>h30qu@yio##^HAOukZM^T zVqNHe#xRXw&*2W~WePpDW=Ghr>@L<JowpjTY6932f<%zhjs)Ip2h`*eNGigsw^GaN z=P45<J87gtq*7rlDin~XBC1!%yf;<RqCo+;&7c0=**_`3h{J5wt5d!PhZ4Wa=clIE z82fv?|DAC1z8MrN#xW0)dPs82j7y0Tn!O?!y6hFiix$Y(hp<O;ND=tWre^BEWAFA@ z&JgNpyz;UeEHJuzZBZ*)p0=tGtsU(vZGL9MZRKe8C1ugAN$h;UHNW2OA8X@&u?_7z zY^Ebr2m4m4V`Fo$a}ar=Eg;lK8lli$NZQzZj8t|!+B!Eu-mw)jdM|=;0qGSgJZr81 zQKR?3DBbXTDiAsxUS+u)09g`BH=lL8;mgQn?FpKXwnjx&Jf!bMgxian;0OzoOfN1k zi_`a!7Rs+vOi1PenGjBYxq69!)BF=>KIzvDEsO2FO;v)Q*@RhHO&R@B^gq;d_g!i) zztC!t9oz1(eH9M|9Q6x+CoDjB1$}XJ%&(b;rOi58CVYvO_a3AU9r**!s0vshtbPvS z-g{Bs^U>uZxBCm0H&dVCJ-A_7Z{!fXU&Qy`c!)Q%;LAeN(KY&P-)(tJGmJNjos<)W z@{)Fv=Q{ft-3(E*v5L$9e}o{Sl~tg*eWeO~&y=x%#7`*VAK#y)bC}0J`rzaz=1k<C z8)s$&of~TcQtTM`5^QrL9gH%EoH0#`EtohR`W~)2jg4JgO*%eNL&znbrf(myCQ!jD zl4cp_q*!!qDs@^+>PC{Q=V-D_`1L<L(t*5sL#rjj32LN=+Gpfh5<tw~F(-I(^%$R` zEOaibdh;5J$Yk7QKs^icGUk9-0MsgX>XQ$|oEkp<vrtR(LhM}A7q>@&W5316bvO#D z6l@7csi;{D-~n67K$<KDX{3xbaiy}YgE?v&Ids~Qsfd4yFLpuI3AUv}WfBJ3$gR@Z z{;HIf&K`G!F@FEU7l?_Q8+i2oy*-C)VA=n>Hzh$hOx?F~TE#@C&HVwQgz9fOfgB3A z6R$?fm&Yg~#eb7n23XR&yL{|){^if7IK<G^+0NZsF)`Ni>*&VL$-ahTGHFYlbO?=% zK3rryOuAV(^D&09t0(ylNvga$0|GuQgmI6nJ4=X``>A8TC(CA^s<DUV9H(nBH|iST z$Lz?hl2#Gp0_(+_IiV>u0B|Ek+)4ks-Q=y`l0b%P(-@O=j48fIN|sD-JI7M)N6n}2 z9R8$a8Hib~S;KB#JS_x15cTz%Lq;_x@oAmkz!rc4VG0+goaPW-OU+jzom{?WskdBu zo$TJeM7~TDU({0nKmpU*#QuhKhRh-ZhzCS(;57JQ@x_Sg<BB#KXeI5lpPD%4vc@i| z3MqCdlpw1+Y%r`n@8j1S!fEl?Y+_|;@94BG{fBoBqKWW2a_$xio}>`8Vg3yJ7Y4?{ z<DE$!`aTVAJr=l}oYkqXs{U*O;o}gE=K2ZezD*0Kl-T&x5WM2>W-M0y(Ta94T%W9a zbVIGJTEnIqE{W#H*tRX|pldf|XJ^Bbb@?d!<N|H^-MAu*4EGlNRLN+1{jw-xD{-hu zYePp*q@jEZH17;@g7%I1gfs=bK1ay{eJprp7N(V~#1~4O8S3M`e9SCLDWaa!Lo7uy z*#nRA+hCKF&s%A&oRcDjbccAPwB##i?QGE#vmgwj@q|G#X_2u91ZP;D9zKrVm{k@L zYZwF6dMdFXK4d)cW8Cf<-M%Z&LEK(Ul|Y(x56b8HFMJQ$)pEVlRGV+=R206p!@arm zmYaZIgcC_elx=Bde~CeTLs-G%=0CL@y5$+%B+xH0TUcTP)RfMz(L9vrN*X2E!{0K! z;ZKWI&@%-w;F!SO6YWRTk!IfUE5L?O)y&tIpf|fRoVZMuLc>2g&!AGLu$RiUS4_rq z;)o8UiHQJr#$l@8&mw$p_7IQvw|><7wNF`iY3)%aaQylJkou{V5e3vIQUhGk2Dmor z|G-cL^`=3=E(Jpg1rj&4Zue}o6RDg3QVoS|O7-gSNVRX1*?h4LPibLM?l7fM$mUB! z|J48NgkZIc=AQJ<6y)#Foo&bI>a@aF^t92@%9Ak8_KAOpyL?nf!_|<W{?HqZ>RL)A zjT>FR>bWp>!82#^d8=~rz>w}GQ?x8vyI$;_Bdv=fvsQj`EtdxlQ4%?Lq>hwbAzPFy z8gCd5>mnMa!o|ZUsmdAnyl!dJjcEzqurIb0ybN&vrYwTvUpxg35+4RU)sGvHV})^l z@+$cwW#{DgA}lst?7}y7#5TXVB*9<M7#IoRoP`|xaa!n&@SmWv<2kH^e5d@f&Hj{t zcvDBFq*2<_XxA5Ag=^gN!vKm!a3Kv6ngU;JgzOhyFF~jYDXvFr4sBvuhUvwUj8D{{ z&i3BpLa^`(WZhmPk%9%9QHT%-EveST>!(2_T5@ldtc>daRCR`1)R!3MeuwTVCnkgG zC(RePCuFN+_eBh7J_L|qR)F=n26D&?Ah=;wf%SNkYDRB#5K_@gFhX@N19A1Z`G^z~ zBG^+Y)tE&2gMbaelHtD{C@#}snQr8h^0rL%4qN)>&Jc@+z_sRQwBO&l85{SSo+k^Y z$3BFNT*b!AQeY1j+9Rq^yO2Ci8ekMH^nLg=L}7AAk37{?6Fv#hJACWgoU4UT?rpWf z5S`F&!5rE@jxeg)iL<48oxezh1lhlMZg^%h-v+tM_Yy?{Tdo40b?ZZb0koB(U&bXg zR}9szJr-yLxL0;VSC+G*b#$bki)7+Y;kz3Zh#g#|XfK?rXyX}2DI<zdxE>%N@sb#` zAbGKge6IX;_YT%8F(D7(euOY6k>rU_rf!b@I}JKNOun)HAN!lPx0fu9(eYuRoA26m z0*RxWp||5Ntb&Xt>=3yD7q;N)=;8TYM*MN`G42)z$Di*S-yNhs5qADv-;o&!DhTk! z)G5lMb~elZb5Qy&kL~OCRK<v?*Ta6w?;gyjgAw%Soe?mdfooAae|ZVnJ?9W&4xltg zCVKqJ^mXAypKIcb%*0?k_;s+6FHa&6>9lv+z+iUCFLHW45OXZPO!>D7=%LU3aQqra zVL<S-dh=nw9%NAQP)nOphQLoq*WYpGTyJ_ed7PR6zwp4N>hBdf4i>d|UHet!?B-Zq zpPD$^B2x?vjwTwEp^fo4m$9(1A;>F{pOB^i0$j+8R=h?i-|bOc$=SPKs1$m#VRd{y z^Pv{o$iiuI>R8Lv#`h=kSu_o{aYZLo_bidA&E&}16qfPJXlz*y9CES;0rKz8DZQaB zcE`#WH7*ssXip;JmZYVWjG_*Xs`dK3BXe6~G87RZ)GWeZfP7Lps-LeMJ%NG%FbGM2 z@la2z3FDyp&~5XN8M&C83GIobHt+Gro>Iot(JI5V>>rVi!<&O(qEEDcr07B#z6$V8 z2E_2f|Db=ysV%NEAHaW_?<*QgrlHOB#^Xhn(V_Se|90Knu{-b%-o)DcJ(W+gHI<;5 zFs+@Qr0WTc%@#gJ5zohW*<sDAdLlNF$GvFA%Q{!eXV08P99r5C$vaRh+om#;5w!&h zIYZ8vZA^L8%>_qL9u??M$K=upoigq(dbRGZ|NfUvuRQTDBY0d$ke!XI3?X46$>Pf+ zdDfj~Gxg|Nc2rCrUcnElNq4FO@WJ=^HKDCu244e#hX;N_Sr@}`$UV0AuY5UbVSrc> zuciEo@HU0KTxN_`SCcP>5b);(2yDH0I;Kd&lxLD_oh>Hp)=^9?k|JPNwNNnOi?V@g zv|Ak*D4If_xF<dHl6B1Jc7J`VS)^?CK%X2(2(Q#WN^7UlW;^2xH=IKxiwq%~UAiod zc_(0y1UUdn4RQ-iVp63wixdVK5o}66>YU%4!I{tRR|g@=x!lbi88ZCNmZgYS5#`bm zFG(U%*mv&<3pIbb%*1{u(7|s<koQ~XBtF&=8wIBgcF(y1h66W$lW!Do0&SP077nAX z*x0yti5^%CNtkaEV9jKH2{j84l_#4eM2ZMx9v}oS&9|_aAu$Bd({qgHU04&2!6Won zWJ(mhv@YO3i;L1PsKd}^gPm>gb(CFm9ME|@1sx++(j3XYn+Hlwma>I7(4R%nQGhkP z(=m;#nS?C$nG0ojWA|TdpG8xZ<AX`d*C0R9&v&|<JaT7v*Y9+Fk7P+~SYbPr9IUbM z>*ML`4JB(sY|aquT1SJ=YnqSKjCVoDZT`1c6me-8a7==~@vQo@)#(@O_B0?zu%q4* z7s@DZmc}^u{jSzwV)T$l5vN~i+b+?S>|AR);!4S9h@+<ZNnWR*+9io_Y%nbJPGzs( zhRQgrc(ISd<X#>TkZ6NDZbCY1M>KWP1cd?tAgF;edc&W={JR?_W|+4XECn!hSp5;7 zJ&_SA&Ts&+n(<e}@*UfIq)0c31s_b7;HVZpt;wjL@o+J?+>{`a<4}EYm;!W}_gD`h zko6dmMU&Qmb(`|*rgr?9EH`?VXF9%qU)Y7FF-^x{q_6iSovqDk7=dlgPn}0N4KVJS zEiuQB7kXV&cQ43x))45$vSj<rD5<yg)Poz?E)fIIEZ73)w9zJ@<Tv1B#R&VQ78l;| zR=6zP)44M3fm1S&RaSDss7m?s%#p2ZEiqA0D_$fMrdOw=bUu<_m#_KaL5=)S!cIEV zu~aE^fAc@}lDc~An18&G(@pC+fq4J7p=de-5DCC8V1;G}n8adHH)zWnex2TQ{WdFf zQ-RlO#fB|bUo9!5Qv}3kV4drz4R@pH)(4x5(%BcyaRNL4*d1zx)UoA0U-9u@1>Sej zehrU~h}Ii=t$4-fcC-0Rl6pk4>yQkiae@$v=5=$BGC4&faIsIDGd|V_-p}im)Pp*7 zk!Lv0rWT>RzDIdu^YjVSK#X79JIYAG`7=zya_ynp#RZXFeb+%UF`MaYB3gjH|2!GJ z=u}7~k9XW0C@bS88dv0jlgTPBPymj6!kDjfL5I32;<<*Y&|l`n!kv5YB2LA)Gl_LA z0VL<cTKJ4Ql4s#J;M3NpQm&yA>X+jt#>vJ}>cWx=6EVDAaTjo8pvkJvbyL(p97lG6 zi#d!-@Jg~Gverx9pe}xn>t-?`x4fU=_K$)pq~F<NeqwSE^)Gxq>GmUwm!+nv5`32B z)kBpt=m8`UL0{J^Kfo*?s>TQ}%&z5Qrp-c2PZHcG&axxKvE(3tk+I}RiTVOM9m%@# zC1$kewqcW=Niwf^qu~*TbzC@}lp~j!W+)=BqyGvcZWMl0Ha+g})~EIqaYAVI*R17X zg6!1Lp~ntYD$EPAJ&R~Zqb^phDKTdw40%du-Eek%qa1mZ@}TgnJtg^11W<_=-Ug}W zXLk<*s1UD0a3?$KL5?dt@MaXh>{;LBs`ZPZlX0SJkyO@|R)SdHleC%-&B`j(F0}CJ z;of-K`GK>cGT@HSQUX2Tj`O)>8P%H=rD18ps2w(Q%;yEv^%eKl0fyEXK!SbIggQ^o z=TgmLq@mx0#sD_dz@*|%!ZIX9Caa3CQCcqGw)Ze)xJIBBS5#Rx@LH3!OS`p3QmbKV zCo7}wnhA0Gnp2D^$Sa1!UDy<-|9wJE5CnjNDRsOdd`Y3lOe#E><GI8sPIgPdrkX}H z(dmXU{Xuz5J_aaR>ZLulK&%vD0${PS4W=jO8(NY5e%Md22+(r|prbVeB%?q8;sj0~ z1Kps%70K#tT5S!dv|mFoC*=An|7|fGbAS84D}h;Z<=|k*wMj`Wf0ull8aMXQKQQw- ztDoDhWopzcIyncF49pB@`P{X%ix0@#WIB}#S1eleBB{$=5*E!#S&5JcpDc*M)ShxU zo3o6%S#>6nXBpjT07*$Pfz)#-Jr!=;e2gT6y*8y*&)+mgT>Zi5a7tkVmZroicOMK+ zMxDgXdY&Gg-!@n&La!zH7QVk(^GryBrz3X^vViT#>b6ZgWeUAg4mzPUb|C$W01iy* zw{^%GvwCuYPn&q-NkuRr20j6<<fHU5TCp6cWGJ3|LW6_P{$Ij~yx%TDPR|qp$L{Ay z-<;fMv>r(=W9hTBe6dM`ZGPCuhXQt-JZ_8?O_P#6+j#O|f(FFaj5}21j$7Dq8^FsH z-E9uoM*J$E?ia<zK3f(M;6b-_%2`5wLK1y6wVx@b{%VAz7^|f>STR_+S7_czWl7wl zZ+GQg{I%ZOPkXXXu38l@3?;Ymk&6>oE&sO;_GiBjiVEr{kzsew|0^kcE2GBytr7-R zi@}HPwXi`8ktT=1@6q-8JSt4Pk>K5RFEiGws~#tBar^SZ^s~Zf6qrnD*LY|~U}pO# zx({S3*ZE1@+5B%Y6!4zi-r!~T7(3*(tBfba`gG$a`R_7Q9r^qN2y7I@k0emVpiksf za<ZHV)}WS;0=gCAb&^k8D`#MuKzs<*QTxiJGxo(tVWB#{^QQUq(_lR0fj)WK7#^Zo z%*)_)<ZNjy=!0Rp+W)Kp6)xq<IRXInhXk5{EsSqt_eKWdt`o(Dv7P~9@nJ0DpKj_C zzeiHIj>EeJmZlbTL7;Wa;<9LPq#oIiqDVo-3DHpw6Qa0p@gPe^3J~8gw)>@ZA`<ie zn>f~O$vQyy#dU-r!3#rQ)G&gUA^=xSg;+qCRsk%`d@nUFGpiy%U#)P7y2Kq%+b|Ll zpUXVPLSTN8-3}aM%Gk@yg`{8v=h2?gAue)f16d~@eKISXdxLmO?CW!2vx}(k3|5P* zohsRvX+M1D(v^h`yOOL^K%5>$6HNX>bZxLo^)=VPA%Ql$!qxicEl1hP&%N6ChEq$w z;nohGPnowEA*oKc=e6=^zNox_Znm+{D986%Q4Bw-H;|k({aBOyh)97}T0pX3ewOQJ zxyC%mYPR##;c$%g4xb2jm!czf)abNj2_Gg3275nWZWML%#(bseL`Y}~U^^Ip0<mXa zHP*yJ&6Vyf_H;mGx2x;RoR=m8gVJx}sr`WVj-oHJ;Sd(zX)Woz<-3o9f9anb<Sq^& zPpf)3I3YPfb#x?zXm=9<enBBQo|;;Ummvgc03Ra@`)eT;Cd-k85ezlH{?klbG_PD* zYl4eg68`#vyUJqS9oOL-Y=Br$r#Z4!zc|#uZn3nH)H9s#ZH7s1Wp3YTwh<vEDA}-B z(6R^|GcEQ9$P4CKwQVGvlCQ*0&JW;V!>OA9Z<!6Z6Xo%GhjZ3s9yPl?F`%o2(1Bm| zBRSC3h^`ig@XNt4<Ao&+)LEAJ&mCZ`TL_R*V%9ZwT6*=L%6*jaFd{4SEo;}!M(i|a zV5%&PNL6?}L7Ow`Y4>MB3|N`Wg4hVfv=_eL^ZsIfF+Y)7c74K?hA{=Wvoxm}C9)k~ z(~F8`=IR-%sJ7lH=O<XDx=9>Eq(nw`L+sDc9Pt@pr_Ph?8x)@bVx<f{7}4=pNQ1PS zKiG-BJO>|L_K0?NMAA#jxP);76t@6BtXoKF?AKzw<RK8%J*@f*%ppI9gdZDE<DlD~ zJKtGeptyf0LD%_teW^=qD&BX>0S?6BgBT6T<y#x=p{zCyTzkaTzd1wuWQQpE-U>h3 z(IHX9(F(KE6#Ugq*;AZDNcR7P<pE!X?<X3n9-Mu;ZhXr}??kxp$T}8qp!RW3(5W3k zZNQ~xm^=%*g&-?AOW^W7?Ao*qP_6cs&HeK5Zq@MU6*z?HqgOljle7cG%q<<5y4gNm z9S7^&kbM^5HN4fVm~k!EP%TD%c<ae>(Dg5gB9=xgLA_P^&MULBa-)iFQ8oa^W^ljA z4++j=@NhENj(5#nX!?k~R`2g58VS(~tLlrP$&E+@6?;B<{vB^zeI4_;x$60Zv}w5> zmo1O8e0WQX-vjnbp{khT@h{8c3i#)tPZMDkZ8weO;g8KZmxw8+_l(5N9~Iq6*+D*h z?ZolV@O5}10>V+^^>qm%;#z$hz_{ng^Yt0+90QR8dbAa&FfV(HF}B=zV{E+Q10ELU zYuU~8f-cmzsQ`4H;;x4yVwAz5_w-^#-Y@>52FaPg$w@>R=7<+s^B3a8nxzZI$VR1< zf~H_CYII!;d5pSlvm<N30YWw8{XG>&jN%iLZP6a1k?Do8#&m%TvCpI-3^ujp1Gyq# zX0u{W>z^oQac6rF89rjJw>RY2tshP)70XzXQvHf@GQPqwAj{Lw+!me$lNfZOJ4B}3 zvXOzXUZirK9NdJ@>8}M+R~m^;|AJUYA%6zpPduJNq}l3Z7Mvv7802h5XKN2R49J+V z;HnQ*o^3N&qy(op<EQ08m<}pDx&}rADBZoInurz%z^t@!_sQs5HOccf84xPUPNdB< zjzcZQG15oEVYKXTSkwM9gvIC(i~y^or9kyN76w!B3SxPyyFj5gBCC5KGs>jQn9cs( zWDOFioL(gX64FHgCeCqm_@GG{iU!Q7ef5b0gW<}xlDBiC^Z0e&@Tunqg_I@71%`e? z*T42UJARH5>nC~Aq7rvD;X>36#?r!fzN&3Dpd={q{-u#)xo~_m03AFHJjuus#qi3> z$dch_=<-GqMcqT-g-sTS)4CuISH)wHU|lh`U397`crCq_;)!s5e&skx&P#|!xl}9w zZ?(qrEQ#Nj&<4SwVA4AtOFn~I^Gsf0#rcKZ)EyIo$GlXU=UsiVgJPDdLN5==Gl7S4 zRMqo_iP$=TVZec51yV}iE=rPEi9V{5QqU6*S-a{2CX&&N`}yivuxP;(3*cx@*|gK^ zLqmxedrU@znFo-6X@>pwxrB!@j+QT`m|BfVrJ2Y!8OJ-YOxd(*9Ew(OYrN*mEyVFc zqtSjK8MQ7EdmG>_n}tr&ir^mnWm?RVYUOv~=Z-78m_^9-xn0X2tDJMuDZ6Sn;J9gU z%YX~4)WTybYkmg(iVFzCKJ$sF{yJt?OB6A@FEKvMHGR|A5%#R5kLJjzkfMY^BEPmX z=$9D{ps*`B#|go2ONCM~>b*2jHH-~9t71~Qt5hoOeYjNhKWh<>^94ClvNTZTb7Px` zy%=?M0|rQgi%qPH+@hr;t{pWhz8d$#*jFAf5WA;Cnw1+pE=u*N6NY$IXr3&v7xz`~ zaSEnBfYd}VXv2zG4iX)dL#B;<A!uKSTU@bTtyQ?oSN*dZkYSAQJg&4SSqwF#oLl@X z&vLjS30f>@4p;!=kAaHLOH@1jaK~4D+<Yk1js2(J*(zz4cTl7tWn}2-AHvWVRF_YF zy+EhzDW@kynGdWTr8ghMjk6+FFQsIG{`<5}seZVsatZkN2FVI13`O7->VIxQeA_5O z78lFDr^WvYFrcjZF~MZbJiEqpKthW0h@;0f6V+17yn&6fm97C}maRy?c{aUFXRAD9 zFY%BwjaR0FY4G&K$TWXKaLM}iT@S`nnW+^+Mn9(*yAg?gB|Bc~oviin2jZUhzsH+0 zn>t(;Y6#+O%cL=g_wnB}CI?B~ox0ddVRjJ?cV^BsG^fS6A?W58FZ*1UsnKHa;>ck7 zLh4zTr}i2rQkL(QmP2DNXeq6=^xE>CQOD7=H_!lUz2GQ8Mw@eyIP^yI%>SU)DVc}) z0P6OY<~S_axLzP#og+N(T6x2;(eaa3<YQd}9XDhymXr)i{6n|=LS^L#D;Q@5VP(Ww z4uQ?Q5ih(XFGm?nn(F;6MRu9!72`fy0G!qA`gb{|;sjDYVs9wBEx)a`pOV!XhnJHl zRtQS3+Q`A;3uTXE0WL=lFbf6&dw{ksk!7&B7`s-^nsq;z>Vm3E(@xIJ`LXP^7=qg# zfbAHEcM{e9py+#F*i`~=npmxbq_VOg+?SuZBEj8hJ+P@>l1py&evVpe1#U614_Jqn zDHh|>G@mKMg|sXvJpK+Zp#8k%Cy{u@)F01Lm`pw=S<#HQ4H+C%k?ZnkaoP$ly^W8K zR?SCdNC;El;$>A0&39Wp8*=noKW?r27?6jkAXbC3)W6!y_F)O%DGDCE@IyXD@lvLR z<Y({~%v-+-{&4RD<gc3XNf?<k4aQbP%BEFM@`qO+{BH-*?szxP#~Q34PF?U8rsUN? z&O`NERY-zwbzHo<Wgcr5Zp2DJgz9EaUnDn!R(%ao#Dqpm(*yW7&XM^#U5UPfL958{ zK%es+z4GTI($9UJROsSl5K=5twwSF}BxW`M{_1UNYFt}t;5ShH0cM<Asvvr)EG{}8 z4NmyP;7PN$N2M27wcLZxU`Rw74Fh<{9cot~k2~mh;OIBkr@*xtDh@=3FDQ8Fh$U!K z)LtYvkVit5OIJ~=h<!(0kelJZKPG7a<Y0`&%B~UuS3AY3*m<&%cWxFmBPPs@Jv&7l z+(Gp|d{H9I?{gQISQ?xC95osJzHzz&v!A$ljV=fbPSjG{LNxk_;xY`-2tCE)Bz)6_ zOKnO!b{a7PCHiVlIcjtw@}<pf?5xv^ZjWWw@-3!HXNoR(y9k%-xG$Y8g-EBHU0_<j zaqDF)W>vETbsW=ZN%93LnK;7R!n_MH(5m*l66D~Aur3GpbxF25&k#HFVKf_NX{r!$ zhrP46(`r<|mwBWPp-n^mV~QAgpBO2ZfeqMS%06j1p^QbvWT|!?Xk=I=S!#%ycp7BL zzjHE+U_?r?WUz=Il0}<Eqsb>Cvr(Fllj0z<OjxAt0Sz+&rxhiHngf7&GC%zRRyk3E zk0y?b%+fA$|ML>~=XOvteD{%1WT;OL0nsZsLx7MdZA^%=wF_jajK+b@7Iwy@a>fDH z?`)%C0@~79)vsVQ_57ZM5*#HBb5s$JnArd?p97bolwXK20lMXk`2lZaVE38ZcRhHH z_Nc|mT?pz&63s{3uC<=cZ_WmTmy5rqnOm33+4Tn()0=�xU&b27d17_5JuhFbFP0 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 Tf8i@KkUkg?&_o2FW&rwMCQceO diff --git a/examples_alone.txt b/examples_alone.txt index 625f35b..ff5916a 100644 --- a/examples_alone.txt +++ b/examples_alone.txt @@ -1,4 +1,4 @@ -# COMPILATION OF THE EXAMPLES PRESENTS IN cute_little_functions.R +# COMPILATION OF THE EXAMPLES PRESENTS IN cute_little_R_functions.R test <- 1:3 ; fun_param_check(data = test, data.name = NULL, print = TRUE, options = NULL, all.options.in.data = FALSE, class = NULL, typeof = NULL, mode = NULL, prop = TRUE, double.as.integer.allowed = FALSE, length = NULL) test <- 1:3 ; fun_param_check(data = test, print = TRUE, class = "numeric", typeof = NULL, double.as.integer.allowed = FALSE) -- GitLab