test <- head(iris)
# basic tests --------------
test_that("data_rename works with one or several replacements", {
expect_named(
data_rename(test, "Sepal.Length", "length"),
c("length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")
)
expect_named(
data_rename(
test, c("Sepal.Length", "Sepal.Width"),
c("length", "width")
),
c("length", "width", "Petal.Length", "Petal.Width", "Species")
)
expect_named(
data_rename(test, c(length = "Sepal.Length", width = "Sepal.Width")),
c("length", "width", "Petal.Length", "Petal.Width", "Species")
)
})
test_that("data_rename cannot have a partially named vector", {
expect_error(
data_rename(test, c(length = "Sepal.Length", "Sepal.Width")),
"all elements must"
)
})
test_that("data_rename returns a data frame", {
x <- data_rename(test, "Sepal.Length", "length")
expect_s3_class(x, "data.frame")
})
test_that("data_rename: multiple selection types", {
expect_named(
data_rename(test, select = 1, "foo"),
c("foo", names(iris)[2:5])
)
expect_named(
data_rename(test, select = regex("tal"), c("foo1", "foo2")),
c("Sepal.Length", "Sepal.Width", "foo1", "foo2", "Species")
)
})
test_that("data_rename: replacement not allowed to have NA or empty strings", {
expect_error(
data_rename(
test,
select = c("Species", "Sepal.Length"),
replacement = c("foo", NA_character_)
),
regexp = "`replacement` is not allowed"
)
})
# replacement -------------
test_that("data_rename errors when no replacement", {
expect_error(
data_rename(test, select = c("Sepal.Length", "Petal.Length")),
"There are more names in `select` than in `replacement`"
)
})
test_that("data_rename errors when too many names in 'replacement'", {
expect_error(
data_rename(test, replacement = paste0("foo", 1:6)),
"There are more names in `replacement` than in `select`"
)
})
test_that("data_rename works when not enough names in 'replacement'", {
expect_error(
data_rename(test, replacement = paste0("foo", 1:2)),
"There are more names in `select` than in `replacement`"
)
})
# no select --------------
test_that("data_rename errors when select = NULL", {
expect_error(
data_rename(test),
"more names in `select`"
)
})
# other --------------
test_that("data_rename: argument 'safe' is deprecated", {
expect_error(
data_rename(iris, "FakeCol", "length", verbose = FALSE),
"were not found"
)
expect_error(
expect_warning(
data_rename(iris, "FakeCol", "length", safe = FALSE, verbose = FALSE),
"used"
)
)
})
test_that("data_rename deals correctly with duplicated replacement", {
x <- data_rename(test,
select = names(test)[1:4],
replacement = c("foo", "bar", "foo", "bar")
)
expect_identical(dim(test), dim(x))
expect_named(x[1:4], c("foo", "bar", "foo.2", "bar.2"))
})
# preserve attributes --------------------------
test_that("data_rename preserves attributes", {
skip_if_not_installed("parameters")
m <- lm(Sepal.Length ~ Species, data = iris)
out <- parameters::parameters(m)
a1 <- attributes(out)
out2 <- data_rename(out, "p", "p-val")
a2 <- attributes(out2)
expect_named(a1, names(a2))
})
# glue-styled select --------------------------
test_that("data_rename glue-style", {
data(mtcars)
out <- data_rename(mtcars[1:3], c("mpg", "cyl", "disp"), "formerly_{col}")
expect_named(out, c("formerly_mpg", "formerly_cyl", "formerly_disp"))
out <- data_rename(mtcars[1:3], c("mpg", "cyl", "disp"), "{col}_is_column_{n}")
expect_named(out, c("mpg_is_column_1", "cyl_is_column_2", "disp_is_column_3"))
out <- data_rename(mtcars[1:3], c("mpg", "cyl", "disp"), "new_{letter}")
expect_named(out, c("new_a", "new_b", "new_c"))
})
test_that("data_rename enough letters", {
data(efc, package = "datawizard")
data(mtcars)
data(iris)
data(ChickWeight)
data(ToothGrowth)
data(USArrests)
data(airquality)
x <- cbind(
mtcars[1:5, ], iris[1:5, ], efc[1:5, ], ChickWeight[1:5, ], ToothGrowth[1:5, ],
USArrests[1:5, ], airquality[1:5, ]
)
expect_named(
data_rename(x, replacement = "long_letter_{letter}"),
c(
"long_letter_a1", "long_letter_b1", "long_letter_c1", "long_letter_d1",
"long_letter_e1", "long_letter_f1", "long_letter_g1", "long_letter_h1",
"long_letter_i1", "long_letter_j1", "long_letter_k1", "long_letter_l1",
"long_letter_m1", "long_letter_n1", "long_letter_o1", "long_letter_p1",
"long_letter_q1", "long_letter_r1", "long_letter_s1", "long_letter_t1",
"long_letter_u1", "long_letter_v1", "long_letter_w1", "long_letter_x1",
"long_letter_y1", "long_letter_z1", "long_letter_a2", "long_letter_b2",
"long_letter_c2", "long_letter_d2", "long_letter_e2", "long_letter_f2",
"long_letter_g2", "long_letter_h2", "long_letter_i2", "long_letter_j2",
"long_letter_k2", "long_letter_l2"
)
)
})
skip_if_not_installed("withr")
withr::with_environment(
new.env(),
test_that("data_rename glue-style, environment", {
data(mtcars)
x <- c("hi", "there", "!")
out <- data_rename(mtcars[1:3], c("mpg", "cyl", "disp"), "col_{x}")
expect_named(out, c("col_hi", "col_there", "col_!"))
expect_error(
data_rename(mtcars[1:3], c("mpg", "disp"), "col_{x}"),
regex = "The number of values"
)
})
)
withr::with_environment(
new.env(),
test_that("data_rename glue-style, object not in environment", {
data(mtcars)
expect_error(
data_rename(mtcars[1:3], c("mpg", "cyl", "disp"), "col_{x}"),
regex = "The object"
)
})
)
withr::with_environment(
new.env(),
test_that("data_rename glue-style, function in environment", {
data(mtcars)
my_fun <- function(cols_to_rename) {
data_rename(head(mtcars)[, 1:6], cols_to_rename, "new_{col}")
}
expect_named(
my_fun(c("mpg", "drat")),
c("new_mpg", "cyl", "disp", "hp", "new_drat", "wt")
)
expect_named(
my_fun("mpg"),
c("new_mpg", "cyl", "disp", "hp", "drat", "wt")
)
})
)
test_that("Argument `pattern` is deprecated", {
expect_warning(
head(data_rename(iris, pattern = "Sepal.Length", "length")),
"Argument `pattern` is deprecated. Please use `select` instead.",
fixed = TRUE
)
})
test_that("works with lists", {
result <- list(x = 1, y = 2)
expect_error(
data_rename(result, select = names(result), replacement = c("a", "b")),
regex = "must be a data frame"
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.