tests/testthat/test-set-missing.r

context("set missing values")

test_that("test single numerical value", {
  dt <- data.table(iris)
  for (j in 1:4) set(dt, i = sample.int(150, j * 30), j, value = NA_integer_)
  num_missing <- sum(is.na(dt))
  set_missing(dt, 10000000)
  expect_equal(sum(is.na(dt)), 0)
  expect_equal(sum(dt == 10000000), num_missing)
})

test_that("test single string value", {
  dt <- data.table(iris)
  set(dt, i = sample.int(150, 25), 5L, value = NA_character_)
  num_missing <- sum(is.na(dt))
  set_missing(dt, "unknown")
  expect_equal(sum(is.na(dt)), 0)
  expect_equal(sum(dt == "unknown"), num_missing)
})

test_that("test single value excluding columns", {
  dt <- data.table(iris)
  set(dt, i = sample.int(150, 25), 5L, value = NA_character_)
  num_missing <- sum(is.na(dt))
  set_missing(dt, "unknown", names(dt)[5L])
  expect_equal(sum(is.na(dt)), num_missing)
})

my_dt <- data.table(
  "a" = c(1, 4, NA, NA, 3, NA),
  "b" = c(1, NA, 5, 2, 3, NA),
  "c" = c(1, "abc", NA, NA, 3, NA),
  "d" = c(1, "4", NA, "def", 3, 2),
  "e" = c(1, 4, 2, 3, 3, 1)
)
my_dt2 <- copy(my_dt)

test_that("test list of both value", {
  set_missing(my_dt, list(50L, "unknown"))
  expect_equal(sum(is.na(my_dt)), 0L)
  expect_equal(sum(my_dt == 50L), 5L)
  expect_equal(sum(my_dt == "unknown"), 4L)
})

test_that("test multiple values excluding columns", {
  set_missing(my_dt2, list(50L, "unknown"), c("a", "e"))
  expect_equal(sum(is.na(my_dt2$a)), 3L)
  expect_equal(sum(my_dt2$b == 50L), 2L)
  expect_equal(sum(is.na(my_dt2$e)), 0L)
})

test_that("test list of numerical values", {
  expect_error(set_missing(my_dt, list(50, 50)))
})

test_that("test list of string values", {
  expect_error(set_missing(my_dt, list("qwerty", "uiop")))
})

test_that("test non-list", {
  expect_error(set_missing(my_dt, c(0, "qwerty")))
})

test_that("test more than two values", {
  expect_error(set_missing(my_dt, list(0, 3, 4)))
})

test_that("test non-data.table objects", {
  expect_equal(class(set_missing(airquality, 0L)), class(airquality))
  expect_equal(dim(set_missing(airquality, 0L)), dim(airquality))
  expect_equal(introduce((set_missing(airquality, 0L)))[["total_missing_values"]], 0L)
})
boxuancui/eda documentation built on Feb. 2, 2024, 1:54 a.m.