tests/testthat/test-table1_design.R

data("breastcancer", package = "risks")
df <- breastcancer |>
  dplyr::mutate(
    continuous = 1:dplyr::n(),
    receptor = dplyr::if_else(dplyr::row_number() %in% 9:11, NA, receptor),
    death = dplyr::if_else(dplyr::row_number() %in% 99:101, NA, death),
    allempty = NA_integer_,
    allempty_lgl = allempty == 1
  )

result <- table1_design(
  death,
  receptor,
  dplyr::everything(),
  data = df
)

test_that("Table 1 design dimensions are correct", {
  expect_equal(nrow(result), expected = 16)
  expect_true(all(names(result) %in% c("label", "outcome", "type", "na_rm")))
})

test_that("Table 1 design picks up missing values", {
  expect_true(all(
    c("death@_NA_", "receptor@_NA_", "allempty@_NA_", "allempty_lgl@_NA_") %in%
      result$outcome
  ))
  expect_false(all(c("stage@_NA_", "continuous@_NA_") %in% result$outcome))
})

test_that("Table 1 design finds variable labels", {
  expect_equal(result$label[[2]], expected = "Death")
})

test_that(
  desc = "Table 1 gets generated",
  code = {
    object <- rifttable(
      design = result,
      data = df
    )
    expected <- tibble::tribble(
      ~Summary,           ~Overall,
      "N",                "192",
      "Death",            "54 (29%)",
      "  Unknown",        "3",
      "Hormone receptor", "",
      "  High",           "144 (76%)",
      "  Low",            "45 (24%)",
      "  Unknown",        "3",
      "Stage",            "",
      "  Stage I",        "67 (35%)",
      "  Stage II",       "96 (50%)",
      "  Stage III",      "29 (15%)",
      "continuous",       "96.50 (48.75, 144.25)",
      "allempty",         "",
      "  Unknown",        "192",
      "allempty_lgl",     "",
      "  Unknown",        "192"
    )
    expect_equal(
      object = object,
      expected = expected
    )
  }
)

test_that(
  desc = "Table 1: by = works",
  code = {
    object <- table1_design(
      continuous,
      by = receptor,
      data = df
    )
    attr(x = object, which = "rt_data") <- NULL
    expect_equal(
      object = object,
      expected = tibble::tribble(
        ~label,       ~outcome,     ~type,          ~exposure,
        "N",          "",           "total",        "receptor",
        "continuous", "continuous", "median (iqr)", "receptor"
      )
    )
  }
)


test_that(
  desc = "Table 1 works without variables",
  code = {
    expect_equal(
      object = nrow(table1_design(data = df)),
      expected = 16
    )
  }
)

test_that(
  desc = "Table 1 with empty levels",
  code = {
    levels(df$stage) <- c(levels(df$stage), "Stage IV")
    object <- table1_design(
      stage,
      by = receptor,
      data = df,
      empty_levels = TRUE
    )
    expect_equal(
      object = nrow(object),
      expected = 6
    )
  }
)

Try the rifttable package in your browser

Any scripts or data that you put into this service are public.

rifttable documentation built on June 8, 2025, 1:52 p.m.