test_that("scalar y replaces all matching x", {
x <- c(0, 1, 0)
expect_identical(na_if(x, 0), c(NA, 1, NA))
expect_identical(na_if(x, 1), c(0, NA, 0))
})
test_that("`y` can be a vector the same length as `x` (matching SQL NULLIF)", {
x <- c(0, 1, 0)
y <- c(0, 1, 2)
expect_identical(na_if(x, y), c(NA, NA, 0))
})
test_that("`NA` replacing itself is a no-op", {
expect_identical(na_if(NA, NA), NA)
})
test_that("missing values are allowed to equal each other, so `NaN`s can be standardized", {
expect_identical(na_if(NaN, NaN), NA_real_)
})
test_that("missing values equal each other in partially incomplete data frame rows", {
x <- tibble(
x = c(2, 1, NA, 1),
y = c(1, NA, NA, NA),
z = c(3, NaN, NA, NaN)
)
y <- tibble(x = 1, y = NA, z = NaN)
expect <- vec_assign(x, i = c(2, 4), value = NA)
expect_identical(na_if(x, y), expect)
})
test_that("works when there are missings in either input", {
expect_identical(na_if(c(1, NA, 2), 1), c(NA, NA, 2))
expect_identical(na_if(c(1, NA, 2), c(1, NA, NA)), c(NA, NA, 2))
})
test_that("works with data frames", {
x <- tibble(a = c(1, 99, 99, 99), b = c("x", "NA", "bar", "NA"))
y <- tibble(a = 99, b = "NA")
expect_identical(
na_if(x, y),
x[c(1, NA, 3, NA),]
)
})
test_that("works with rcrd types", {
x <- new_rcrd(list(a = c(1, 99, 99, 99), b = c("x", "NA", "bar", "NA")))
y <- new_rcrd(list(a = 99, b = "NA"))
expect_identical(
na_if(x, y),
x[c(1, NA, 3, NA)]
)
})
test_that("is type stable on `x`", {
expect_identical(na_if(0L, 0), NA_integer_)
expect_snapshot(error = TRUE, {
na_if(0L, 1.5)
})
})
test_that("is size stable on `x`", {
expect_snapshot(error = TRUE, {
na_if(1, integer())
})
expect_snapshot(error = TRUE, {
na_if(1, c(1, 2))
})
expect_snapshot(error = TRUE, {
na_if(c(1, 2, 3), c(1, 2))
})
})
test_that("requires vector types for `x` and `y`", {
expect_snapshot(error = TRUE, {
na_if(environment(), 1)
})
expect_snapshot(error = TRUE, {
na_if(1, environment())
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.