From 566ac671ea54012779cb944bb6b02ad4d62ff494 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:43:41 +0000 Subject: [PATCH 1/4] Initial plan From 2092d0c3610b316460766328651c9e0dc3448429 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:49:18 +0000 Subject: [PATCH 2/4] Add warning for combining objects from different hierarchies Co-authored-by: rix133 <6965560+rix133@users.noreply.github.com> --- R/combineRDBESDataObjects.R | 33 +++++++++++++++++++ tests/testthat/test-combineRDBESDataObjects.R | 26 +++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/R/combineRDBESDataObjects.R b/R/combineRDBESDataObjects.R index e58831f6..865171e2 100644 --- a/R/combineRDBESDataObjects.R +++ b/R/combineRDBESDataObjects.R @@ -9,6 +9,13 @@ #' @param strict (Optional) This function validates its input data - should #' the validation be strict? The default is TRUE. #' +#' @details +#' When combining RDBESDataObjects from different hierarchies (e.g., H1 and H5), +#' a warning is issued. The resulting combined object will have a mixed hierarchy, +#' which may be structurally and statistically invalid for some analyses. However, +#' such combinations can be useful for fisheries overviews, annual reports, or +#' countries performing broader estimations. +#' #' @return the combination of \code{RDBESDataObject1} and \code{RDBESDataObject2} #' @seealso \link[data.table]{rbindlist} #' @export @@ -31,6 +38,32 @@ combineRDBESDataObjects <- function(RDBESDataObject1, validateRDBESDataObject(RDBESDataObject1, verbose = verbose, strict = strict) validateRDBESDataObject(RDBESDataObject2, verbose = verbose, strict = strict) + + # Check for multiple hierarchies + hierarchy1 <- NULL + hierarchy2 <- NULL + + if (!is.null(RDBESDataObject1$DE) && nrow(RDBESDataObject1$DE) > 0) { + hierarchy1 <- unique(RDBESDataObject1$DE$DEhierarchy) + } + + if (!is.null(RDBESDataObject2$DE) && nrow(RDBESDataObject2$DE) > 0) { + hierarchy2 <- unique(RDBESDataObject2$DE$DEhierarchy) + } + + # Warn if combining different hierarchies + if (!is.null(hierarchy1) && !is.null(hierarchy2) && + length(hierarchy1) > 0 && length(hierarchy2) > 0) { + if (!all(hierarchy1 %in% hierarchy2) || !all(hierarchy2 %in% hierarchy1)) { + warning("Combining RDBESDataObjects from different hierarchies (", + paste(hierarchy1, collapse = ", "), " and ", + paste(hierarchy2, collapse = ", "), + "). This creates a mixed hierarchy object that may be structurally ", + "and statistically invalid for some analyses.", + call. = FALSE) + } + } + # Create an empty RDBESDataObject as the basis of what we will return myRDBESDataObject <- createRDBESDataObject() diff --git a/tests/testthat/test-combineRDBESDataObjects.R b/tests/testthat/test-combineRDBESDataObjects.R index 92425576..2c7c533a 100644 --- a/tests/testthat/test-combineRDBESDataObjects.R +++ b/tests/testthat/test-combineRDBESDataObjects.R @@ -40,4 +40,30 @@ test_that("combineRDBESDataObjects returns valid RDBESDataObject when supplied expect_error(validateRDBESDataObject(myCombinedObject), NA) }) +test_that("combineRDBESDataObjects warns when combining objects from different hierarchies", { + + myObject1 <- importRDBESDataCSV(rdbesExtractPath = "./h1_v_20250211") + myObject2 <- importRDBESDataCSV(rdbesExtractPath = "./h5_v_20250211") + + # Check these are valid objects before we try and combine them + expect_error(validateRDBESDataObject(myObject1), NA) + expect_error(validateRDBESDataObject(myObject2), NA) + + # Expect a warning about different hierarchies + expect_warning(combineRDBESDataObjects(RDBESDataObject1=myObject1, + RDBESDataObject2=myObject2), + "Combining RDBESDataObjects from different hierarchies") +}) + +test_that("combineRDBESDataObjects does not warn when combining objects from same hierarchy", { + + myObject1 <- importRDBESDataCSV(rdbesExtractPath = "./h1_v_20250211") + myObject2 <- importRDBESDataCSV(rdbesExtractPath = "./h1_v_20250211") + + # Expect no warning about different hierarchies (but will have duplicate rows error later) + expect_warning(combineRDBESDataObjects(RDBESDataObject1=myObject1, + RDBESDataObject2=myObject2), + NA) +}) + }) ## end capture.output From af7946d10e5837ea5f1277db3315596fa8076ca6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:51:49 +0000 Subject: [PATCH 3/4] Add comprehensive tests for hierarchy warning edge cases Co-authored-by: rix133 <6965560+rix133@users.noreply.github.com> --- tests/testthat/test-combineRDBESDataObjects.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/testthat/test-combineRDBESDataObjects.R b/tests/testthat/test-combineRDBESDataObjects.R index 2c7c533a..5cf38035 100644 --- a/tests/testthat/test-combineRDBESDataObjects.R +++ b/tests/testthat/test-combineRDBESDataObjects.R @@ -66,4 +66,15 @@ test_that("combineRDBESDataObjects does not warn when combining objects from sam NA) }) +test_that("combineRDBESDataObjects does not warn when one object has no DE table", { + + myObject1 <- importRDBESDataCSV(rdbesExtractPath = "./h1_v_20250211") + myObject2 <- createRDBESDataObject() # Empty object with no DE + + # Expect no warning because one object has no hierarchy + expect_warning(combineRDBESDataObjects(RDBESDataObject1=myObject1, + RDBESDataObject2=myObject2), + NA) +}) + }) ## end capture.output From b92ce853d100b34e0389fbb09c99ce1776cfc1a3 Mon Sep 17 00:00:00 2001 From: Richard Meitern Date: Wed, 15 Oct 2025 18:10:15 +0300 Subject: [PATCH 4/4] Add branch to pull request trigger in pkgdown.yaml Only when main updates --- .github/workflows/pkgdown.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index bfc9f4db..3de2a835 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -4,6 +4,7 @@ on: push: branches: [main, master] pull_request: + branches: [ main ] release: types: [published] workflow_dispatch: