diff --git a/R/ard_categorical.survey.design.R b/R/ard_categorical.survey.design.R index 1827970e..63cb9b0c 100644 --- a/R/ard_categorical.survey.design.R +++ b/R/ard_categorical.survey.design.R @@ -117,6 +117,15 @@ ard_categorical.survey.design <- function(data, } ) + # return note about column names that result in errors ----------------------- + if (any(by %in% c("variable", "variable_level"))) { + cli::cli_abort( + "The {.arg by} argument cannot include variables named {.val {c('variable', 'variable_level')}}.", + call = get_cli_abort_call() + ) + } + + # calculate counts ----------------------------------------------------------- # this tabulation accounts for unobserved combinations svytable_counts <- .svytable_counts(data, variables, by, denominator) diff --git a/tests/testthat/_snaps/ard_categorical.survey.design.md b/tests/testthat/_snaps/ard_categorical.survey.design.md index c72bebd0..55c7abb1 100644 --- a/tests/testthat/_snaps/ard_categorical.survey.design.md +++ b/tests/testthat/_snaps/ard_categorical.survey.design.md @@ -28,3 +28,11 @@ ! Column "Class" is all missing and cannot be tabulated. i Only columns of class and can be tabulated when all values are missing. +# ard_categorical.survey.design(by) messages about protected names + + Code + ard_categorical(svy_mtcars, by = variable, variables = gear) + Condition + Error in `ard_categorical()`: + ! The `by` argument cannot include variables named "variable" and "variable_level". + diff --git a/tests/testthat/test-ard_categorical.survey.design.R b/tests/testthat/test-ard_categorical.survey.design.R index 7ba6333e..68003272 100644 --- a/tests/testthat/test-ard_categorical.survey.design.R +++ b/tests/testthat/test-ard_categorical.survey.design.R @@ -1172,3 +1172,29 @@ test_that("ard_categorical.survey.design() works with variables with only 1 leve ) expect_invisible(cards::check_ard_structure(ard_svy_cat_cell, method = FALSE)) }) + + +test_that("ard_categorical.survey.design(by) messages about protected names", { + svy_mtcars <- + survey::svydesign( + ids = ~1, + data = mtcars |> + dplyr::mutate( + variable = am, + variable_level = cyl, + by = am, + by_level = cyl + ), + weights = ~1 + ) + + expect_snapshot( + error = TRUE, + ard_categorical(svy_mtcars, by = variable, variables = gear) + ) + + expect_error( + ard_categorical(svy_mtcars, by = variable_level, variables = gear), + 'The `by` argument cannot include variables named "variable" and "variable_level".' + ) +})