tests/testthat/test-labels.R

context("test functions variable label related functions")

data(mtcars)

mtcars_labs <- within(mtcars,{
  var_lab(mpg) = "Miles/(US) gallon"
  var_lab(cyl) = "Number of cylinders"
  var_lab(disp) = "Displacement (cu.in.)"
  var_lab(hp) = "Gross horsepower"
  var_lab(drat) = "Rear axle ratio"
  var_lab(wt) = "Weight (lb/1000)"
  var_lab(qsec) = "1/4 mile time"
  var_lab(vs) = "V/S"
  val_lab(vs) = c("V-shaped" = 0, "straight"=1)
  var_lab(am) = "Transmission"
  val_lab(am) = c(automatic = 0, manual=1)
  var_lab(gear) = "Number of forward gears"
  var_lab(carb) = "Number of carburetors"
})

test_that("Check assign variable lables", {
  expect_identical(var_lab(mtcars$am), NULL)
  empty_list <- vector(mode = "list", length = ncol(mtcars))
  names(empty_list) <- names(mtcars)
  expect_identical(var_lab(mtcars), empty_list)


  var_lab(mtcars$am) = "Transmission"
  empty_list$am <- "Transmission"

  expect_identical(var_lab(mtcars$am), "Transmission")
  expect_identical(var_lab(mtcars), empty_list)

  expect_error(var_lab(mtcars$am) <- 1)
  expect_error(var_lab(mtcars$am) <- c("One", "Two"))
  expect_error(var_lab(mtcars) <- "Mydata")

  mtcars$am_tmp <- mtcars$am
  var_lab(mtcars$am_tmp) <- NULL

  expect_identical(mtcars$am_tmp, drop_lab(mtcars$am))

  expect_false(has.label(mtcars$am_tmp))

  expect_null(val_lab(mtcars))

})

test_that("Drop variable lables", {

  var_lab(mtcars$am) = "Transmission"

  empty_list <- vector(mode = "list", length = ncol(mtcars))
  names(empty_list) <- names(mtcars)

  expect_identical(var_lab(drop_lab(mtcars$am)), NULL)
  expect_identical(var_lab(drop_lab(mtcars_labs)), empty_list)

})

context("test functions variable value label related functions")

test_that("Assign value lables", {

  a = 1
  expect_error({val_lab(a) = c(a = 1, b = 1)})
  expect_warning({val_lab(a) = c(1, b = 2)})
  val_lab(a) <- c(a = 1, a = 2)

  dd = data.frame(a=1:3,b=3:1,d=3)

  val_lab(dd$a) = c(a=1)
  val_lab(dd$b) = c(b=2)
  val_lab(dd$d) = c(d=3)

  expect_identical(list("a" = c(a=1),
                        "b" = c(b=2),
                        "d" = c(d=3)), val_lab(dd))

  expect_true(has.labels(a))
  a <- unval(a)
  expect_false(has.labels(a))
  expect_identical(unval(a), 1)

  dd = data.frame(a=1:3,b=3:1,d=3)
  dd$a <- as.factor(dd$a)
  val_lab(dd$a) <- c(a = 1, b = 2)

})


context("test functions drop labels")

test_that("Label/labls attributes", {

  data(mtcars)

  expect_identical(unlab(mtcars_labs), mtcars)

  var_with_lab <- rep(1:2,5)
  var_lab(var_with_lab) <- "Income"
  val_lab(var_with_lab) <- c("Low"=1,"High"=2)

  var_nolab <- rep(1:2,5)
  var_ut <- copy_lab(var_nolab, var_with_lab)
  expect_identical(var_ut, var_with_lab)

  var_nolab <- as.character(rep(1:2,5))
  expect_error(copy_lab(var_nolab, var_with_lab))

  expect_null(unlab(NULL))

})


test_that("Convert value label to value", {

  vec = 1:7

  expect_identical(lab2val(vec),vec)

  mat = matrix(1:9,ncol=3)

  expect_identical(lab2val(mat),mat)

  out_mat =  mat
  expect_identical(lab2val(mat),out_mat)

  mat[,3] = NA
  out_mat[,3] = NA
  expect_identical(lab2val(mat),out_mat)
  expect_identical(lab2val(numeric(0)),numeric(0))

  df = data.frame(a=1:3,b = 3:1,d=letters[1:3],e=NA,stringsAsFactors = FALSE)

  val_lab(df$a) = c(a=1,b=2)
  val_lab(df$b) = c(a=45)
  val_lab(df$d) = c(a="b",b="d",e="c")
  val_lab(df$e) = c(a=1,b=2)

  var_lab(df$b) = "Column b"

  out_df = unval(df)

  out_df$a[1] = "a"
  out_df$a[2] = "b"
  out_df$b = as.character(out_df$b)
  var_lab(out_df$b) = "Column b"
  out_df$d[2] = "a"
  out_df$d[3] = "e"
  out_df$e = as.character(out_df$e)

  expect_identical(unlab(lab2val(df)), unlab(out_df))

  aaa = c(1:3, 3.5)
  val_lab(aaa) = c(a=1, b = 2)

  expect_identical(class(lab2val(aaa)), "character")

  var_lab(aaa) <- "Test"
  aaa <- to_factor(aaa)
  val_lab(aaa) = c(a=1, b = 2)
  expect_identical(var_lab(aaa), "Test")

  expect_error(val_lab(aaa) <- c(1, 2),
               "'val_lab' - labels should be named vector.")

})
shug0131/cctu documentation built on Nov. 10, 2023, 12:03 p.m.