context("Test copy_labels()") test_that("copy_labels() copy variable / value labels and missing values", { x <- labelled( c(1, 1, 2), labels = c(Male = 1, Female = 2), label = "Assigned sex at birth" ) y <- copy_labels(x, 1:3) expect_equal(var_label(x), var_label(y)) expect_equal(val_labels(x), val_labels(y)) expect_equal(na_range(x), na_range(y)) expect_equal(na_values(x), na_values(y)) x <- labelled_spss( 1:10, labels = c(Good = 1, Bad = 8), na_values = c(9, 10), na_range = c(11, 19), label = "variable label" ) y <- 10:1 %>% copy_labels_from(x) expect_equal(var_label(x), var_label(y)) expect_equal(val_labels(x), val_labels(y)) expect_equal(na_range(x), na_range(y)) expect_equal(na_values(x), na_values(y)) x <- dplyr::tibble( a = labelled(c(1, 1, 2), c(yes = 1, no = 2)), b = labelled_spss(1:3, c(top = 1, bottom = 2), na_values = 3L), c = c("a", "b", "c") ) %>% set_variable_labels( a = "variable a", b = "variable B", c = "third variable" ) y <- dplyr::tibble( c = factor(c("a", "b", "c")), b = 2, a = 1:3, d = 9:7 ) %>% copy_labels_from(x) expect_equal(var_label(x$a), var_label(y$a)) expect_equal(val_labels(x$a), val_labels(y$a)) expect_equal(na_range(x$a), na_range(y$a)) expect_equal(na_values(x$a), na_values(y$a)) expect_equal(var_label(x$b), var_label(y$b)) expect_equal(val_labels(x$b), val_labels(y$b)) expect_equal(na_range(x$b), na_range(y$b)) expect_equal(na_values(x$b), na_values(y$b)) expect_equal(var_label(x$c), var_label(y$c)) }) test_that("if 'from' is not a labelled vector, copy only variable label", { # regardless of the class of 'to' x <- 1:10 var_label(x) <- "variable label" y <- 10:1 %>% copy_labels_from(x) expect_equal(var_label(x), var_label(y)) x <- factor(1:10) var_label(x) <- "variable label" y <- 10:1 %>% as.character() %>% copy_labels_from(x) expect_equal(var_label(x), var_label(y)) }) test_that("copy_labels checks", { # do not work with a list expect_error( copy_labels(list(1, 2), 1:2) ) expect_error( copy_labels(1:2, list(1, 2)) ) # if from is a data.frame, to should also be a data.frame expect_error( copy_labels(iris, 1:2) ) expect_error( copy_labels(1:2, iris) ) # if from is a labelled vector, to should have the same type x <- labelled( c(1, 1, 2), labels = c(Male = 1, Female = 2), label = "Assigned sex at birth" ) expect_error( copy_labels(x, c("1", "2")) ) x <- labelled_spss( 1:10, labels = c(Good = 1, Bad = 8), na_values = c(9, 10), na_range = c(11, 19), label = "variable label" ) expect_error( copy_labels(x, c("1", "2")) ) # except if .strict = FALSE x <- labelled( c(1, 1, 2), labels = c(Male = 1, Female = 2), label = "Assigned sex at birth" ) expect_error( copy_labels(x, c("1", "2"), .strict = FALSE), NA ) x <- labelled_spss( 1:10, labels = c(Good = 1, Bad = 8), na_values = c(9, 10), na_range = c(11, 19), label = "variable label" ) expect_error( copy_labels(x, c("1", "2"), .strict = FALSE), NA ) })