context("na_values") # na_values -------------------------------------------------------------------- test_that("na_values works with data.frame", { xhs <- haven::labelled_spss( c(1, 2, 3, NA, 99), c(t1 = 1, t2 = 2, Missing = 99), na_value = 99, label = "variable label" ) y <- c(1:4, NA) df <- data.frame(xhs = xhs, y = y, stringsAsFactors = FALSE) res <- list(xhs = 99, y = NULL) expect_equal(na_values(df), res) }) # na_range -------------------------------------------------------------------- test_that("na_range works with data.frame", { xhs <- haven::labelled_spss( c(1, 2, 3, NA, 99), c(t1 = 1, t2 = 2, Missing = 99), na_value = 99, na_range = c(99, Inf), label = "variable label" ) y <- c(1:4, NA) df <- data.frame(xhs = xhs, y = y, stringsAsFactors = FALSE) res <- list(xhs = c(99, Inf), y = NULL) expect_equal(na_range(df), res) }) # user_na_to_na ---------------------------------------------------------------- test_that("user_na_to_na works with data.frame", { xhs <- haven::labelled_spss( c(c(1, 2, 3), NA, 99), c(t1 = 1, t2 = 2, Missing = 99), na_value = 99, na_range = c(99, Inf), label = "variable label" ) y <- c(1:4, NA) df <- data.frame(xhs = xhs, y = y, stringsAsFactors = FALSE) una_df <- user_na_to_na(df) expect_equal(df$y, y) expect_null(na_values(una_df$x)) expect_null(na_range(una_df$x)) }) # set_na_values ---------------------------------------------------------------- test_that("set_na_values works correctly", { df <- dplyr::tibble(s1 = c("M", "M", "F", "F"), s2 = c(1, 1, 2, 9)) svdf <- set_value_labels(df, s2 = c(yes = 1, no = 2)) sna_svdf <- set_na_values(svdf, s2 = 9) expect_equal(which(is.na(sna_svdf$s2)), 4L) expect_error(set_na_values(svdf, s4 = 8, s2 = 9)) sna_svdfF <- set_na_values(svdf, s4 = 8, s2 = 9, .strict = FALSE) expect_equal(sna_svdf, sna_svdfF) expect_error(set_na_values(svdf, .values = list(s2 = 9, s4 = 3))) expect_error(set_na_values(svdf, .values = c(s2 = 9))) snu_svdf <- set_na_values(sna_svdfF, s2 = NULL) expect_equal(snu_svdf, svdf) snu_svdf <- set_na_values(sna_svdf, s2 = NULL) expect_equal(snu_svdf, svdf) df <- dplyr::tibble(s1 = c(2, 4, 7, 9), s2 = c(1, 1, 2, 9)) svdf <- set_value_labels(df, s2 = c(yes = 1, no = 2)) sna_svdf <- set_na_values(svdf, .values = 9L) expect_equal(na_values(sna_svdf), list(s1 = 9, s2 = 9)) sna_svdfF <- set_na_values( svdf, .values = list(s1 = 9, s3 = 2), .strict = FALSE ) expect_equal(na_values(sna_svdfF), list(s1 = 9, s2 = NULL)) }) # set_na_range ----------------------------------------------------------------- test_that("set_na_range works correctly", { df <- dplyr::tibble(s1 = c("M", "M", "F", "F"), s2 = c(1, 1, 2, 9)) svdf <- set_value_labels(df, s2 = c(yes = 1, no = 2)) expect_error(set_na_range(svdf, s2 = 9)) expect_error(set_na_range(svdf, n2 = c(9, Inf))) snr_svdf <- set_na_range(svdf, s2 = c(9, Inf)) expect_equal(na_range(snr_svdf$s2), c(9, Inf)) expect_error(set_na_range(svdf, s2 = c(9, Inf), s4 = c(0, 10))) snr_svdfF <- set_na_range(svdf, s2 = c(9, Inf), s4 = c(0, 10), .strict = FALSE) expect_equal(snr_svdfF, snr_svdf) expect_error(set_na_range(svdf, .values = c(s2 = 9))) expect_error( set_na_range(svdf, .values = list(s2 = c(9, Inf), s4 = c(0, 10))) ) snrv_svdf <- set_na_range(svdf, .values = list(s2 = c(9, Inf))) expect_equal(snrv_svdf, snr_svdf) snrv_svdfF <- set_na_range( svdf, .values = list(s2 = c(9, Inf), s4 = c(0, 10)), .strict = FALSE ) expect_equal(snrv_svdfF, snr_svdf) df <- dplyr::tibble(s1 = c(2, 4, 7, 9), s2 = c(1, 1, 2, 9)) svdf <- set_value_labels(df, s2 = c(yes = 1, no = 2)) sna_svdf <- set_na_range(svdf, .values = c(9L, 100L)) expect_equal(na_range(sna_svdf), list(s1 = c(9, 100), s2 = c(9, 100))) x <- factor(1:5) expect_error(na_values(x) <- 1) expect_error(na_range(x) <- 4:5) v <- 1:10 v <- set_na_range(v, 3, 5) v <- set_na_values(v, 8, 9) expect_equal(na_range(v), c(3, 5)) expect_equal(na_values(v), c(8, 9)) }) test_that("about user NAs", { v <- labelled_spss( c(1, 2, 9, 3, 9, 1, NA), labels = c(yes = 1, no = 3, "don't know" = 9), na_values = 9 ) expect_equal( is.na(v), c(FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE) ) expect_equal( is_user_na(v), c(FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE) ) expect_equal( user_na_to_tagged_na(v) %>% format_tagged_na() %>% trimws(), c("1", "2", "NA(a)", "3", "NA(a)", "1", "NA") ) expect_equal( user_na_to_na(letters), letters ) x <- c(NA, 9, tagged_na("a")) na_values(x) <- 9 expect_equal(is.na(x), c(TRUE, TRUE, TRUE)) expect_equal(is_regular_na(x), c(TRUE, FALSE, FALSE)) expect_equal(is_user_na(x), c(FALSE, TRUE, FALSE)) expect_equal(is_tagged_na(x), c(FALSE, FALSE, TRUE)) })