From 6f76437c34f004128eed69f925877145ef5e42fb Mon Sep 17 00:00:00 2001 From: ZekeMarshall Date: Thu, 18 Jan 2024 13:45:35 +0000 Subject: [PATCH] Adding Czekanowski Site and Group functionality --- R/create_constants.R | 41 +-- R/functions.R | 37 ++- R/load_data.R | 1 + R/similarity_functions.R | 82 +++++ app.R | 1 + .../nvc_floristic_tables_numeric.rds | Bin 0 -> 101434 bytes data/prep_data/prep_data_assignNVC.R | 17 +- modules/nvcAssignment_server.R | 301 +++++++++++++++++- modules/nvcAssignment_ui.R | 26 ++ modules/server.R | 13 +- modules/setupData_server.R | 34 ++ modules/sidebar_server.R | 2 - renv.lock | 150 +++++++++ report/Report.Rmd | 49 ++- tests/testthat.R | 12 + www/documentation.html | 22 +- 16 files changed, 740 insertions(+), 48 deletions(-) create mode 100644 R/similarity_functions.R create mode 100644 data/bundled_data/nvc_floristic_tables_numeric.rds create mode 100644 modules/setupData_server.R create mode 100644 tests/testthat.R diff --git a/R/create_constants.R b/R/create_constants.R index 2a30d88..9b82174 100644 --- a/R/create_constants.R +++ b/R/create_constants.R @@ -1,3 +1,9 @@ +# Taxonomic Backbone Methods ---------------------------------------------- +taxonomicBackboneMethod_options <- c("Bundled" = "bundled", + "Upload" = "upload", + "Kew WCVP" = "wcvp", + "Syntopic Tables" = "syntopicTables") + # Input method options ---------------------------------------------------- inputMethod_options <- c("Manual" = "manual", "Example" = "example", @@ -103,9 +109,10 @@ matchSpecies_options <- c("No" = "No", # Results to View NVC Assignment ------------------------------------------ resultsViewNVCAssign_options <- c("Site, Pseudo-quadrat" = "nvcAssignSitePseudo", "Group, Pseudo-quadrat" = "nvcAssignGroupPseudo", - "Quadrat, Pseudo-quadrat" = "nvcAssignQuadratPseudo"#, - # "Site, Czekanowski" = "nvcAssignSiteCzekanowski", - # "Group, Czekanowski" = "nvcAssignGroupCzekanowski" + "Quadrat, Pseudo-quadrat" = "nvcAssignQuadratPseudo", + "Site, Czekanowski" = "nvcAssignSiteCzekanowski", + "Group, Czekanowski" = "nvcAssignGroupCzekanowski"#, + # "Quadrat, Czekanowski" = "nvcAssignQuadratCzekanowski" ) # Results to View EIVs ---------------------------------------------------- @@ -191,10 +198,11 @@ selectSurveyGroups_options <- c() # Report Options ---------------------------------------------------------- - -reportOptions_options <- list(`NVC Assignment` = c("Site" = "nvcAssignmentResultsSite", - "Group" = "nvcAssignmentResultsGroup", - "Quadrat" = "nvcAssignmentResultsQuadrat"), +reportOptions_options <- list(`NVC Assignment Pseudo-quadrat` = c("Site" = "nvcAssignmentResultsSite", + "Group" = "nvcAssignmentResultsGroup", + "Quadrat" = "nvcAssignmentResultsQuadrat"), + `NVC Assignment Czekanowski` = c("Site" = "nvcAssignmentResultsSite_Czekanowski", + "Group" = "nvcAssignmentResultsGroup_Czekanowski"), `Floristic Tables` = c("Site" = "composedFloristicTablesSite", "Group" = "composedFloristicTablesGroup"), `Species Frequency` = c("Species Frequency" = "speciesFrequencyTable"), @@ -215,22 +223,3 @@ reportOptions_options <- list(`NVC Assignment` = c("Site" = "nvcAssignmentResult `Survey Table` = c("Survey Table" = "surveyTable") ) - -# reportOptions_options <- c("NVC Assignment, Site" = "nvcAssignmentResultsSite", -# "NVC Assignment, Group" = "nvcAssignmentResultsGroup", -# "NVC Assignment, Quadrat" = "nvcAssignmentResultsQuadrat", -# "Floristic Tables, Site" = "composedFloristicTablesSite", -# "Floristic Tables, Group" = "composedFloristicTablesGroup", -# "Species Frequency" = "speciesFrequencyTable", -# "Weighted Mean Hill-Ellenberg Values, Site" = "weightedMeanHEValuesSite", -# "Unweighted Mean Hill-Ellenberg Values, Site" = "unweightedMeanHEValuesSite", -# "Weighted Mean Hill-Ellenberg Values, Group" = "weightedMeanHEValuesGroup", -# "Unweighted Mean Hill-Ellenberg Values, Group" = "unweightedMeanHEValuesGroup", -# "Weighted Mean Hill-Ellenberg Values, Quadrat" = "weightedMeanHEValuesQuadrat", -# "Unweighted Mean Hill-Ellenberg Values, Quadrat" = "unweightedMeanHEValuesQuadrat", -# "MVA, National" = "mvaNationalReference", -# "MVA, Local (restricted)" = "mvaLocalReferenceRestricted", -# "MVA, Local (unrestricted)" = "mvaLocalReferenceUnrestricted", -# "Survey Table" = "surveyTable" -# ) - diff --git a/R/functions.R b/R/functions.R index 5464832..2f23b4e 100644 --- a/R/functions.R +++ b/R/functions.R @@ -17,4 +17,39 @@ # Calculate mean EIVs using surveyTable # Compose floristic tables from surveyTable - +composeSyntopicTables <- function(surveyTable){ + + syntopicTables <- surveyTable |> + # tidyr::unite(col = "ID", c("Year", "Group"), sep = " - ", remove = TRUE) |> + dplyr::mutate("ID" = as.character(Year)) |> + dplyr::select(-Year, -Group) |> + dplyr::select(-Cover) |> + dplyr::mutate("Present" = 1) |> + tidyr::pivot_wider(id_cols = c(ID, Species), + values_from = Present, + names_from = Quadrat) |> + dplyr::rowwise() |> + dplyr::mutate("Sum" = sum(dplyr::c_across(dplyr::where(is.numeric)), na.rm = TRUE)) |> + dplyr::ungroup() |> + dplyr::mutate("Frequency" = Sum / (ncol(dplyr::pick(dplyr::everything())) - 3)) |> # -2 + dplyr::select(ID, Species, Sum, Frequency) |> + dplyr::mutate( + "Constancy" = + dplyr::case_when( + Frequency <= 0.2 ~ "I", + Frequency <= 0.4 ~ "II", + Frequency <= 0.6 ~ "III", + Frequency <= 0.8 ~ "IV", + Frequency <= 1.0 ~ "V", + TRUE ~ as.character(Frequency) + ) + ) |> + dplyr::select(ID, Species, Constancy) |> + dplyr::mutate("Constancy" = factor(Constancy, levels = c("V", "IV", "III", "II", "I"))) |> + dplyr::arrange(ID, Constancy, Species) + + return(syntopicTables) + +} + + \ No newline at end of file diff --git a/R/load_data.R b/R/load_data.R index fb21cd4..0d41d16 100644 --- a/R/load_data.R +++ b/R/load_data.R @@ -4,6 +4,7 @@ example_data_all <- readRDS(file = "./data/bundled_data/example_data_all.rds") # NVC floristic tables and community codes -------------------------------- nvc_floristic_tables <- readRDS(file = "./data/bundled_data/nvc_floristic_tables.rds") +nvc_floristic_tables_numeric <- readRDS(file = "./data/bundled_data/nvc_floristic_tables_numeric.rds") nvc_community_codes <- readRDS(file = "./data/bundled_data/nvc_community_codes.rds") nvc_community_namesCodes <- readRDS("./data/bundled_data/nvc_community_namesCodes.rds") diff --git a/R/similarity_functions.R b/R/similarity_functions.R new file mode 100644 index 0000000..1b35045 --- /dev/null +++ b/R/similarity_functions.R @@ -0,0 +1,82 @@ +#' Calculate the similarity between vegetation data using the Czekanowski index +#' +#' Calculate the Czekanowski's Quantitative Index using either a set of sample +#' vegetation plots and a set of reference vegetation plots; or a set of composed +#' floristic/syntopic tables and a set of references floristic/syntopic tables. +#' Method follows Bray and Curtis (1957) and Field and McFarlane (1968). +#' +#' @param samp_df A data frame containing either sample vegetation plot data with cover values, or a syntopic/floristic table composed from sample vegetation plot data. +#' @param comp_df A data frame containing either +#' @param samp_species_col +#' @param comp_species_col +#' @param samp_group_name +#' @param comp_group_name +#' @param samp_weight_name +#' +#' @return +#' @export +#' +#' @examples +similarityCzekanowski <- function(samp_df, comp_df, + samp_species_col, comp_species_col, + samp_group_name, comp_group_name, + samp_weight_name, comp_weight_name){ + + # Check argument types are correct + checkmate::assertDataFrame(samp_df) + checkmate::assertDataFrame(comp_df) + checkmate::assert_character(samp_species_col, any.missing = FALSE) + checkmate::assert_character(comp_species_col, any.missing = FALSE) + checkmate::assert_character(samp_group_name, any.missing = FALSE) + checkmate::assert_character(comp_group_name, any.missing = FALSE) + checkmate::assert_character(samp_weight_name, any.missing = FALSE) + checkmate::assert_character(comp_weight_name, any.missing = FALSE) + + # Split input data frames into iterable lists + samp_df_split <- split(samp_df, samp_df[[samp_group_name]]) + comp_df_split <- split(comp_df, comp_df[[comp_group_name]]) + + # Create a set of pairwise combinations for each samp_group_name and comp_group_name value. + eval_combinations <- expand.grid(names(samp_df_split), names(comp_df_split)) + names(eval_combinations) <- c(samp_group_name, comp_group_name) + + # Calculate the Czekanowski for each combination of samp_group_name and comp_group_name value. + similarity_results <- mapply( + X = eval_combinations[[samp_group_name]], Y = eval_combinations[[comp_group_name]], + SIMPLIFY = FALSE, + USE.NAMES = FALSE, + FUN = function(X, Y){ + + samp_data <- samp_df_split[[X]] + comp_data <- comp_df_split[[Y]] + + samp_id <- unique(samp_data[[samp_group_name]]) + comp_id <- unique(comp_data[[comp_group_name]]) + + samp_data_prepped <- samp_data[,c(samp_species_col, samp_weight_name)] + comp_data_prepped <- comp_data[,c(comp_species_col, comp_weight_name)] + + eval_table <- merge(x = samp_data_prepped, y = comp_data_prepped, by = "Species", all = TRUE, suffixes = c("_samp", "_comp")) + + eval_table[is.na(eval_table)] <- 0 + + eval_table["min"] <- apply(eval_table[c(paste0(samp_weight_name, "_samp"), paste0(comp_weight_name, "_comp"))], 1, min) + + eval_table_sum <- colSums(eval_table[,c(paste0(samp_weight_name, "_samp"), paste0(comp_weight_name, "_comp"), "min")], na.rm = TRUE) + + similarity <- (2 * eval_table_sum[["min"]]) / (eval_table_sum[[paste0(samp_weight_name, "_samp")]] + eval_table_sum[[paste0(comp_weight_name, "_comp")]]) + + similarity_list <- list(samp_group_name = samp_id, comp_group_name = comp_id, "Similarity" = similarity) + names(similarity_list) <- c(samp_group_name , comp_group_name, "Similarity") + + return(similarity_list) + + } + ) + + # Collapse list to data frame + similarity_df <- do.call(rbind.data.frame, similarity_results) + + return(similarity_df) + +} \ No newline at end of file diff --git a/app.R b/app.R index ae1f1f4..7bfbf5a 100644 --- a/app.R +++ b/app.R @@ -9,6 +9,7 @@ source("R/render_docs.R", local = TRUE) # Source functions -------------------------------------------------------- source("R/functions.R", local = TRUE) +source("R/similarity_functions.R", local = TRUE) source("R/reactable_functions.R", local = TRUE) # Source sub-modules ------------------------------------------------------ diff --git a/data/bundled_data/nvc_floristic_tables_numeric.rds b/data/bundled_data/nvc_floristic_tables_numeric.rds new file mode 100644 index 0000000000000000000000000000000000000000..7d15a6001f1d7c3b2edbaf0645277b966dbb0793 GIT binary patch literal 101434 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

=SjQ?aNTb}&jrSc%XoeUJ=U_0L!(8fIrZVR+ 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 R7uyk81u24@pT7Ek{~s3q`F;QZ literal 0 HcmV?d00001 diff --git a/data/prep_data/prep_data_assignNVC.R b/data/prep_data/prep_data_assignNVC.R index 66f1bdd..1bb25cc 100644 --- a/data/prep_data/prep_data_assignNVC.R +++ b/data/prep_data/prep_data_assignNVC.R @@ -43,7 +43,7 @@ nvc_communities_final <- concordance_all_trimmed |> dplyr::right_join(assignNVC::NVC_communities, by = "Species") |> dplyr::select(-Species, -freq, -BRC) |> dplyr::rename("Species" = "proposedSpecies") |> - dplyr::rename("NVC.Code" = "NVC")|> + dplyr::rename("NVC.Code" = "NVC") |> dplyr::mutate( "Constancy" = dplyr::case_when( @@ -73,6 +73,21 @@ nrow(nvc_communities_final) == nrow(assignNVC::NVC_communities) saveRDS(object = nvc_communities_final, file = "./data/bundled_data/nvc_floristic_tables.rds") +nvc_communities_final_numeric <- nvc_communities_final |> + dplyr::mutate( + "Constancy" = + dplyr::case_when( + Constancy == "I" ~ 0.2, + Constancy == "II" ~ 0.4, + Constancy == "III" ~ 0.6, + Constancy == "IV" ~ 0.8, + Constancy == "V" ~ 1.0, + TRUE ~ as.numeric(0) + ) + ) + +saveRDS(object = nvc_communities_final_numeric, file = "./data/bundled_data/nvc_floristic_tables_numeric.rds") + nvc_community_codes <- nvc_communities_final |> dplyr::pull(NVC.Code) |> unique() diff --git a/modules/nvcAssignment_server.R b/modules/nvcAssignment_server.R index 1c9b083..54078b7 100644 --- a/modules/nvcAssignment_server.R +++ b/modules/nvcAssignment_server.R @@ -1,4 +1,4 @@ -nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) { +nvcAssignment <- function(input, output, session, surveyTable, floristicTables, sidebar_options) { ns <- session$ns @@ -28,6 +28,13 @@ nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) shinyjs::show(id = "nvcAssignmentSiteTable_div") shinyjs::show(id = "nvcAssignmentGroupTable_div") shinyjs::show(id = "nvcAssignmentQuadratTable_div") + + shinyjs::show(id = "nvcAssignmentSiteTable_Czekanowski_div") + shinyjs::show(id = "nvcAssignmentGroupTable_Czekanowski_div") + + # shinyjs::show(id = "nvcAssignmentSiteTable_div") + # shinyjs::show(id = "nvcAssignmentGroupTable_div") + # shinyjs::show(id = "nvcAssignmentQuadratTable_div") }) |> bindEvent(resultsViewNVCAssign(), @@ -55,6 +62,18 @@ nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) shinyjs::hide(id = "nvcAssignmentQuadratTable_div") } + if("nvcAssignSiteCzekanowski" %in% resultsViewNVCAssign()){ + shinyjs::show(id = "nvcAssignmentSiteTable_Czekanowski_div") + } else { + shinyjs::hide(id = "nvcAssignmentSiteTable_Czekanowski_div") + } + + if("nvcAssignGroupCzekanowski" %in% resultsViewNVCAssign()){ + shinyjs::show(id = "nvcAssignmentGroupTable_Czekanowski_div") + } else { + shinyjs::hide(id = "nvcAssignmentGroupTable_Czekanowski_div") + } + }) |> bindEvent(resultsViewNVCAssign(), ignoreInit = FALSE, @@ -70,13 +89,18 @@ nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) ignoreInit = FALSE, once = TRUE) -# Calculate nvcAssignment results by site ---------------------------------------- + +# Calculate ALL nvcAssignment results ------------------------------------- nvcAssignmentQuadrat_rval <- reactiveVal() nvcAssignmentGroup_rval <- reactiveVal() nvcAssignmentSite_rval <- reactiveVal() + nvcAssignmentSite_Czekanowski_rval <- reactiveVal() + nvcAssignmentGroup_Czekanowski_rval <- reactiveVal() observe({ + shiny::req(floristicTables()) + # req(isFALSE(runAnalysis() == 0)) shinybusy::show_modal_spinner( @@ -106,7 +130,7 @@ nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) for(code in habitatRestriction()){ - regex <- paste0("^", code, "\\d{1,}.+(?![a-z*][P])") # + regex <- paste0("^", code, "\\d{1,}.+(?![a-z*][P])") codes_regex <- c(codes_regex, regex) @@ -137,8 +161,6 @@ nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) dplyr::ungroup() |> dplyr::left_join(surveyTable_IDs, by = "ID") - # assign(x = "nvcAssignmentQuadrat", value = nvcAssignmentQuadrat, envir = .GlobalEnv) - nvcAssignmentQuadrat_prepped <- nvcAssignmentQuadrat |> dplyr::select(Year, Group, Quadrat, NVC.Code, Mean.Similarity, Standard.Deviation)|> dplyr::group_by(Year, Group, Quadrat) |> @@ -189,6 +211,69 @@ nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) }) + # Prepare floristicTables + floristicTables <- floristicTables() + floristicTables_prepped <- floristicTables |> + dplyr::mutate( + "Constancy" = + dplyr::case_when( + Constancy == "I" ~ 0.2, + Constancy == "II" ~ 0.4, + Constancy == "III" ~ 0.6, + Constancy == "IV" ~ 0.8, + Constancy == "V" ~ 1.0, + TRUE ~ as.numeric(0) + ) + ) + + # Prepare nvc_floristic_tables_numeric + if(!is.null(habitatRestriction())){ + + nvc_floristic_tables_numeric_prepped <- nvc_floristic_tables_numeric |> + dplyr::filter(stringr::str_detect(string = NVC.Code, pattern = codes_regex)) + + } else { + + nvc_floristic_tables_numeric_prepped <- nvc_floristic_tables_numeric + + } + + + # assign(x = "habitatRestriction", value = habitatRestriction(), envir = .GlobalEnv) + # assign(x = "codes_regex", value = codes_regex, envir = .GlobalEnv) + + # assign(x = "floristicTables_prepped", value = floristicTables_prepped, envir = .GlobalEnv) + # assign(x = "nvc_floristic_tables_numeric", value = nvc_floristic_tables_numeric, envir = .GlobalEnv) + + # Calculate NVC Similarity by Site using the Czekanowski index + nvcAssignmentSiteGroup_Czekanowski <- similarityCzekanowski(samp_df = floristicTables_prepped, + comp_df = nvc_floristic_tables_numeric_prepped, + samp_species_col = "Species", + comp_species_col = "Species", + samp_group_name = "ID", + comp_group_name = "NVC.Code", + samp_weight_name = "Constancy", + comp_weight_name = "Constancy") + + nvcAssignmentSite_Czekanowski <- nvcAssignmentSiteGroup_Czekanowski |> + dplyr::filter(stringr::str_detect(string = ID, pattern = "^\\b[0-9_]+\\b$")) |> + dplyr::mutate("Year" = ID) |> + dplyr::select(Year, NVC.Code, Similarity)|> + dplyr::arrange(Year, dplyr::desc(Similarity)) + + nvcAssignmentGroup_Czekanowski <- nvcAssignmentSiteGroup_Czekanowski |> + dplyr::filter(stringr::str_detect(string = ID, pattern = "^\\b[0-9_]+\\b$", negate = TRUE)) |> + dplyr::mutate("Year" = stringr::str_extract(string = ID, pattern = "\\d{4}")) |> + dplyr::mutate("Group" = stringr::str_extract(string = ID, pattern = "(?<=\\s-\\s).*$")) |> + dplyr::select(Year, Group, NVC.Code, Similarity) |> + dplyr::arrange(Year, Group, dplyr::desc(Similarity)) + + # assign(x = "nvcAssignmentSite_Czekanowski", value = nvcAssignmentSite_Czekanowski, envir = .GlobalEnv) + # assign(x = "nvcAssignmentGroup_Czekanowski", value = nvcAssignmentGroup_Czekanowski, envir = .GlobalEnv) + + nvcAssignmentSite_Czekanowski_rval(nvcAssignmentSite_Czekanowski) + nvcAssignmentGroup_Czekanowski_rval(nvcAssignmentGroup_Czekanowski) + shinybusy::remove_modal_spinner() }) |> @@ -495,6 +580,198 @@ nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) outputOptions(output, "nvcAssignmentQuadratTable", suspendWhenHidden = FALSE) + # Intialise NVC Assignment Site Czekanowski Table ----------------------- + nvcAssignmentSiteTable_Czekanowski_init <- data.frame("Year" = integer(), + "Similarity" = numeric(), + "NVC.Code" = character() + ) + + output$nvcAssignmentSiteTable_Czekanowski <- reactable::renderReactable({ + + nvcAssignmentSiteTable_Czekanowski <- reactable::reactable(data = nvcAssignmentSiteTable_Czekanowski_init, + filterable = FALSE, + pagination = FALSE, + highlight = TRUE, + bordered = TRUE, + sortable = TRUE, + wrap = FALSE, + resizable = TRUE, + style = list(fontSize = "1rem"), + class = "my-tbl", + # style = list(fontSize = "1rem"), + rowClass = "my-row", + defaultColDef = reactable::colDef( + format = reactable::colFormat(digits = 2), + headerClass = "my-header", + class = "my-col", + align = "center" # Needed as alignment is not passing through to header + ) + ) + + return(nvcAssignmentSiteTable_Czekanowski) + + }) + + + + # Update NVC Assignment Site Czekanowski Table -------------------------- + observe({ + + + shiny::req(nvcAssignmentSite_Czekanowski_rval()) + + nvcAssignmentSite_Czekanowski <- nvcAssignmentSite_Czekanowski_rval() |> + dplyr::group_by(Year) |> + dplyr::slice(1:nTopResults()) |> + dplyr::ungroup() + + output$nvcAssignmentSiteTable_Czekanowski <- reactable::renderReactable({ + + nvcAssignmentSiteTable_Czekanowski <- reactable::reactable(data = nvcAssignmentSite_Czekanowski, + filterable = FALSE, + pagination = FALSE, + highlight = TRUE, + bordered = TRUE, + sortable = TRUE, + wrap = FALSE, + resizable = TRUE, + style = list(fontSize = "1rem"), + class = "my-tbl", + # style = list(fontSize = "1rem"), + rowClass = "my-row", + defaultColDef = reactable::colDef( + format = reactable::colFormat(digits = 2), + headerClass = "my-header", + class = "my-col", + align = "center" # Needed as alignment is not passing through to header + ), + columns = list( + Year = reactable::colDef( + format = reactable::colFormat(digits = 0), + filterable = TRUE, + filterMethod = reactable::JS("function(rows, columnId, filterValue) { + return rows.filter(function(row) { + return row.values[columnId] == filterValue + }) + }") + ) + ) + ) + + return(nvcAssignmentSiteTable_Czekanowski) + + }) + + }) |> + bindEvent(nvcAssignmentSite_Czekanowski_rval(), + nTopResults(), + ignoreInit = TRUE, + ignoreNULL = TRUE) + + + outputOptions(output, "nvcAssignmentSiteTable_Czekanowski", suspendWhenHidden = FALSE) + + + # Initialise NVC Assignment Group Czekanowski Table --------------------- + nvcAssignmentGroupTable_Czekanowski_init <- data.frame("Year" = integer(), + "Group" = character(), + "Similarity" = numeric(), + "NVC.Code" = character() + ) + + nvcAssignmentGroupTable_Czekanowski_rval <- reactiveVal(nvcAssignmentGroupTable_Czekanowski_init) + + output$nvcAssignmentGroupTable_Czekanowski <- reactable::renderReactable({ + + nvcAssignmentGroupTable_Czekanowski <- reactable::reactable(data = nvcAssignmentGroupTable_Czekanowski_init, + filterable = FALSE, + pagination = FALSE, + highlight = TRUE, + bordered = TRUE, + sortable = TRUE, + wrap = FALSE, + resizable = TRUE, + style = list(fontSize = "1rem"), + class = "my-tbl", + # style = list(fontSize = "1rem"), + rowClass = "my-row", + defaultColDef = reactable::colDef( + format = reactable::colFormat(digits = 2), + headerClass = "my-header", + class = "my-col", + align = "center" # Needed as alignment is not passing through to header + ) + ) + + return(nvcAssignmentGroupTable_Czekanowski) + + }) + + + # Update NVC Assignment Group CzekanowskiTable ------------------------ + observe({ + + req(nvcAssignmentGroup_Czekanowski_rval()) + + nvcAssignmentGroup_Czekanowski <- nvcAssignmentGroup_Czekanowski_rval() |> + dplyr::group_by(Year, Group) |> + dplyr::slice(1:nTopResults()) |> + dplyr::ungroup() + + output$nvcAssignmentGroupTable_Czekanowski <- reactable::renderReactable({ + + nvcAssignmentGroupTable_Czekanowski <- reactable::reactable(data = nvcAssignmentGroup_Czekanowski, + filterable = FALSE, + pagination = FALSE, + highlight = TRUE, + bordered = TRUE, + sortable = TRUE, + wrap = FALSE, + resizable = TRUE, + style = list(fontSize = "1rem"), + class = "my-tbl", + # style = list(fontSize = "1rem"), + rowClass = "my-row", + defaultColDef = reactable::colDef( + format = reactable::colFormat(digits = 2), + headerClass = "my-header", + class = "my-col", + align = "center" # Needed as alignment is not passing through to header + ), + columns = list( + Year = reactable::colDef( + format = reactable::colFormat(digits = 0), + filterable = TRUE, + filterMethod = reactable::JS("function(rows, columnId, filterValue) { + return rows.filter(function(row) { + return row.values[columnId] == filterValue + }) + }") + ), + Group = reactable::colDef( + filterable = TRUE, + filterMethod = reactable::JS("function(rows, columnId, filterValue) { + return rows.filter(function(row) { + return row.values[columnId] == filterValue + }) + }") + ) + ) + ) + + return(nvcAssignmentGroupTable_Czekanowski) + + }) + + }) |> + bindEvent(nvcAssignmentGroup_Czekanowski_rval(), + nTopResults(), + ignoreInit = TRUE, + ignoreNULL = TRUE) + + + outputOptions(output, "nvcAssignmentGroupTable_Czekanowski", suspendWhenHidden = FALSE) + # Compose All NVC Assignment Results -------------------------------------- nvcAssignmentAll_rval <- reactiveVal() @@ -520,9 +797,21 @@ nvcAssignment <- function(input, output, session, surveyTable, sidebar_options) dplyr::slice(1:nTopResults()) |> dplyr::ungroup() + nvcAssignmentSite_Czekanowski <- nvcAssignmentSite_Czekanowski_rval() |> + dplyr::group_by(Year) |> + dplyr::slice(1:nTopResults()) |> + dplyr::ungroup() + + nvcAssignmentGroup_Czekanowski <- nvcAssignmentGroup_Czekanowski_rval() |> + dplyr::group_by(Year, Group) |> + dplyr::slice(1:nTopResults()) |> + dplyr::ungroup() + nvcAssignmentAll_list <- list("nvcAssignmentSite" = nvcAssignmentSite, "nvcAssignmentGroup" = nvcAssignmentGroup, - "nvcAssignmentQuadrat" = nvcAssignmentQuadrat) + "nvcAssignmentQuadrat" = nvcAssignmentQuadrat, + "nvcAssignmentSite_Czekanowski" = nvcAssignmentSite_Czekanowski, + "nvcAssignmentGroup_Czekanowski" = nvcAssignmentGroup_Czekanowski) nvcAssignmentAll_rval(nvcAssignmentAll_list) diff --git a/modules/nvcAssignment_ui.R b/modules/nvcAssignment_ui.R index 33a8afd..077e23a 100644 --- a/modules/nvcAssignment_ui.R +++ b/modules/nvcAssignment_ui.R @@ -43,6 +43,32 @@ nvcAssignmentUI <- function(id){ shiny::div(shiny::br()) + ), + + shiny::div( + id = ns("nvcAssignmentSiteTable_Czekanowski_div"), + + shiny::h5("Site Similarities"), + + shiny::div( + reactable::reactableOutput(outputId = ns("nvcAssignmentSiteTable_Czekanowski")) + ), + + shiny::div(shiny::br()) + + ), + + shiny::div( + id = ns("nvcAssignmentGroupTable_Czekanowski_div"), + + shiny::h5("Group Similarities"), + + shiny::div( + reactable::reactableOutput(outputId = ns("nvcAssignmentGroupTable_Czekanowski")) + ), + + shiny::div(shiny::br()) + ) ) ) diff --git a/modules/server.R b/modules/server.R index f1d8bab..626bbbd 100644 --- a/modules/server.R +++ b/modules/server.R @@ -31,21 +31,22 @@ server <- function(input, output, session) { surveyTable = surveyTable, sidebar_options = sidebar_options) + floristicTables <- shiny::callModule(module = floristicTables, + id = "floristicTables_id_1", + surveyTable = surveyTable, + surveyTableValidator = surveyTableValidator, + sidebar_options = sidebar_options) + nvcAssignment <- shiny::callModule(module = nvcAssignment, id = "nvcAssignment_id_1", surveyTable = surveyTable, + floristicTables = floristicTables, sidebar_options = sidebar_options) habCor <- shiny::callModule(module = habCor, id = "habCor_id_1", nvcAssignment = nvcAssignment, sidebar_options = sidebar_options) - - floristicTables <- shiny::callModule(module = floristicTables, - id = "floristicTables_id_1", - surveyTable = surveyTable, - surveyTableValidator = surveyTableValidator, - sidebar_options = sidebar_options) speciesFreq <- shiny::callModule(module = speciesFreq, id = "speciesFreq_id_1", diff --git a/modules/setupData_server.R b/modules/setupData_server.R new file mode 100644 index 0000000..d8ffbd5 --- /dev/null +++ b/modules/setupData_server.R @@ -0,0 +1,34 @@ +setupData <- function(input, output, session, sidebar_options) { + + ns <- session$ns + +# Retrieve sidebar options ------------------------------------------------ + taxonomicBackboneMethod <- reactiveVal() + bundledTaxonomicBackbone <- reactiveVal() + wcvpCountries <- reactiveVal() + + observe({ + + taxonomicBackboneMethod(sidebar_options()$taxonomicBackboneMethod) + bundledTaxonomicBackbone(sidebar_options()$bundledTaxonomicBackbone) + wcvpCountries(sidebar_options()$wcvpCountries) + + }) |> + bindEvent(sidebar_options(), ignoreInit = FALSE) + + +# Create Accepted Species Object ------------------------------------------ + observe({ + + }) |> + bindEvent(taxonomicBackboneMethod(), + ignoreInit = TRUE, + ignoreNULL = TRUE) + +# Create Setup Data List -------------------------------------------------- + setupData <- list() + +# Return Setup Data ------------------------------------------------------- + return() + +} \ No newline at end of file diff --git a/modules/sidebar_server.R b/modules/sidebar_server.R index 88cd9ee..bf88741 100644 --- a/modules/sidebar_server.R +++ b/modules/sidebar_server.R @@ -39,8 +39,6 @@ sidebar <- function(input, output, session, surveyTable, surveyTableValidator, n sidebar_options(sidebar_options_list) - # print(input$reportOptions) - }) |> bindEvent(input$inputMethod, # input$resetTable, diff --git a/renv.lock b/renv.lock index e2f0a34..a3fba4a 100644 --- a/renv.lock +++ b/renv.lock @@ -200,6 +200,16 @@ ], "Hash": "b1b1c3be5c75309f6107726fa58ee20c" }, + "brio": { + "Package": "brio", + "Version": "1.1.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "68bd2b066e1fe780bbf62fc8bcc36de3" + }, "broom": { "Package": "broom", "Version": "1.0.5", @@ -292,6 +302,18 @@ ], "Hash": "f61dbaec772ccd2e17705c1e872e9e7c" }, + "checkmate": { + "Package": "checkmate", + "Version": "2.3.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "backports", + "utils" + ], + "Hash": "c01cab1cb0f9125211a6fc99d540e315" + }, "cli": { "Package": "cli", "Version": "3.6.1", @@ -442,6 +464,34 @@ ], "Hash": "d6fd1b1440c1cacc6623aaa4e9fe352b" }, + "desc": { + "Package": "desc", + "Version": "1.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "utils" + ], + "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" + }, + "diffobj": { + "Package": "diffobj", + "Version": "0.3.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "crayon", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" + }, "digest": { "Package": "digest", "Version": "0.6.33", @@ -1137,6 +1187,21 @@ ], "Hash": "15da5a8412f317beeee6175fbc76f4bb" }, + "pkgbuild": { + "Package": "pkgbuild", + "Version": "1.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "callr", + "cli", + "desc", + "processx" + ], + "Hash": "c0143443203205e6a2760ce553dafc24" + }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", @@ -1147,6 +1212,27 @@ ], "Hash": "01f28d4278f15c76cddbea05899c5d6f" }, + "pkgload": { + "Package": "pkgload", + "Version": "1.3.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "crayon", + "desc", + "fs", + "glue", + "methods", + "pkgbuild", + "rlang", + "rprojroot", + "utils", + "withr" + ], + "Hash": "876c618df5ae610be84356d5d7a5d124" + }, "plotly": { "Package": "plotly", "Version": "4.10.2", @@ -1179,6 +1265,13 @@ ], "Hash": "6c00a09ba7d34917d9a3e28b15dd74e3" }, + "praise": { + "Package": "praise", + "Version": "1.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "a555924add98c99d2f411e37e7d25e9f" + }, "prettyunits": { "Package": "prettyunits", "Version": "1.1.1", @@ -1435,6 +1528,16 @@ ], "Hash": "79f14e53725f28900d936f692bfdd69f" }, + "rprojroot": { + "Package": "rprojroot", + "Version": "2.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "4c8415e0ec1e29f3f4f6fc108bef0144" + }, "rstudioapi": { "Package": "rstudioapi", "Version": "0.15.0", @@ -1672,6 +1775,35 @@ ], "Hash": "90b28393209827327de889f49935140a" }, + "testthat": { + "Package": "testthat", + "Version": "3.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "brio", + "callr", + "cli", + "desc", + "digest", + "evaluate", + "jsonlite", + "lifecycle", + "magrittr", + "methods", + "pkgload", + "praise", + "processx", + "ps", + "rlang", + "utils", + "waldo", + "withr" + ], + "Hash": "4767a686ebe986e6cb01d075b3f09729" + }, "textshaping": { "Package": "textshaping", "Version": "0.3.6", @@ -1899,6 +2031,24 @@ ], "Hash": "8318e64ffb3a70e652494017ec455561" }, + "waldo": { + "Package": "waldo", + "Version": "0.5.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "diffobj", + "fansi", + "glue", + "methods", + "rematch2", + "rlang", + "tibble" + ], + "Hash": "c7d3fd6d29ab077cbac8f0e2751449e6" + }, "webshot": { "Package": "webshot", "Version": "0.5.5", diff --git a/report/Report.Rmd b/report/Report.Rmd index 334f84a..c849a2f 100644 --- a/report/Report.Rmd +++ b/report/Report.Rmd @@ -66,6 +66,9 @@ nvcAssignmentSite <- nvcAssignment$nvcAssignmentSite nvcAssignmentGroup <- nvcAssignment$nvcAssignmentGroup nvcAssignmentQuadrat <- nvcAssignment$nvcAssignmentQuadrat +nvcAssignmentSite_Czekanowski <- nvcAssignment$nvcAssignmentSite_Czekanowski +nvcAssignmentGroup_Czekanowski <- nvcAssignment$nvcAssignmentGroup_Czekanowski + # EIVs weightedMeanHEValuesSite <- avgEIVs$weightedMeanHEValuesSite unweightedMeanHEValuesSite <- avgEIVs$unweightedMeanHEValuesSite @@ -100,9 +103,11 @@ mvaNationalRef_CCA_arrowData <- mvaNationalRefResults$CCA_arrowData # Report options. Load from create_constants.R!!! -reportOptions_options <- list(`NVC Assignment` = c("Site" = "nvcAssignmentResultsSite", - "Group" = "nvcAssignmentResultsGroup", - "Quadrat" = "nvcAssignmentResultsQuadrat"), +reportOptions_options <- list(`NVC Assignment Pseudo-quadrat` = c("Site" = "nvcAssignmentResultsSite", + "Group" = "nvcAssignmentResultsGroup", + "Quadrat" = "nvcAssignmentResultsQuadrat"), + `NVC Assignment Czekanowski` = c("Site" = "nvcAssignmentResultsSite_Czekanowski", + "Group" = "nvcAssignmentResultsGroup_Czekanowski"), `Floristic Tables` = c("Site" = "composedFloristicTablesSite", "Group" = "composedFloristicTablesGroup"), `Species Frequency` = c("Species Frequency" = "speciesFrequencyTable"), @@ -288,6 +293,44 @@ if("nvcAssignmentResultsQuadrat" %in% reportOptions){ ``` +```{r nvcAssignmentResultsSiteCzekanowski, echo=FALSE, message=FALSE, warning=FALSE, results='asis'} + +if("nvcAssignmentResultsSite_Czekanowski" %in% reportOptions){ + + cat("## NVC Assignment Czekanowski, by Site") + + nvcAssignmentSite_Czekanowski_prepped <- nvcAssignmentSite_Czekanowski |> + dplyr::mutate_if(is.numeric, round, digits = 2) + + kableExtra::kbl(x = nvcAssignmentSite_Czekanowski_prepped, format = "latex", booktabs = TRUE, + longtable = TRUE, linesep = "", + caption = "The top NVC communities fitted using the Czekanowski method, for the site by year." + ) |> + kableExtra::kable_styling(latex_options = c("repeat_header", "HOLD_position")) + +} + +``` + +```{r nvcAssignmentResultsGroupCzekanowski, echo=FALSE, message=FALSE, warning=FALSE, results='asis'} + +if("nvcAssignmentResultsGroup_Czekanowski" %in% reportOptions){ + + cat("## NVC Assignment Czekanowski, by Group") + + nvcAssignmentGroup_Czekanowski_prepped <- nvcAssignmentGroup_Czekanowski |> + dplyr::mutate_if(is.numeric, round, digits = 2) + + kableExtra::kbl(x = nvcAssignmentGroup_Czekanowski_prepped, format = "latex", booktabs = TRUE, + longtable = TRUE, linesep = "", + caption = "The top NVC communities fitted using the Czekanowski method, by group and year" + ) |> + kableExtra::kable_styling(latex_options = c("repeat_header", "HOLD_position")) + +} + +``` + ```{r floristicTablesTitle, echo=FALSE, message=FALSE, warning=FALSE, results='asis'} reportOptions_floristicTables <- reportOptions_options$`Floristic Tables` diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..2f6bda4 --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1,12 @@ +# This file is part of the standard setup for testthat. +# It is recommended that you do not modify it. +# +# Where should you do additional test configuration? +# Learn more about the roles of various files in: +# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview +# * https://testthat.r-lib.org/articles/special-files.html + +library(testthat) +library(pseudoMAVIS) + +test_check("pseudoMAVIS") diff --git a/www/documentation.html b/www/documentation.html index b27fb64..1ef1984 100644 --- a/www/documentation.html +++ b/www/documentation.html @@ -737,7 +737,7 @@

2.10.1 Options

-NVC Assignment +NVC Assignment Pseudo-quadrat Site @@ -745,7 +745,7 @@

2.10.1 Options

-NVC Assignment +NVC Assignment Pseudo-quadrat Group @@ -753,7 +753,7 @@

2.10.1 Options

-NVC Assignment +NVC Assignment Pseudo-quadrat Quadrat @@ -761,6 +761,22 @@

2.10.1 Options

+NVC Assignment Czekanowski + + +Site + + + + +NVC Assignment Czekanowski + + +Group + + + + Floristic Tables