tests/testthat/test-statamode.r

context("Correct mode selected")

test_that("statamode selects the mode right for each method", {
  expect_match(statamode("a"), "a")
  expect_match(statamode(c("a", "a", "b", "b"), method = "stata"), ".")
  expect_match(statamode(c("a", "a", "b", "b"), method = "last"), "b")
  expect_match(statamode(c("b", "b", "a", "a"), method = "last"), "a")
 # expect_that(statamode(c("a", "a", "b", "b"), method="sample"), matches(c("a", "b"),all=FALSE))
})


test_that("statamode returns correct modes for each method using numbers", {
  suppressWarnings(RNGversion("3.5.0"))
  set.seed(100)
  a <- c(3, 1, 9, 8, 4, 4, 7, 7)
  b <- statamode(a, method = "last")
  c <- statamode(a, method = "stata")
  d <- statamode(a, method = "sample")
  
  expect_is(b, "numeric")
  expect_is(c, "character")
  expect_is(d, "numeric")
  expect_equal(b, 7)
  expect_identical(c, ".")
  expect_equal(d, 4)
})

test_that("statamode defaults to stata", {
  x <- c(1,1,3,3)
  expect_identical(statamode(x),
                   statamode(x, method='stata'))
})

test_that("statamode handles all types of modes", {
  suppressWarnings(RNGversion("3.5.0"))
  set.seed(21341)
  tests <- expand.grid(class = c("numeric", "factor", "character"), 
                       method = c("last", "stata", "sample"), 
                       stringsAsFactors = FALSE)
  
  for(i in nrow(tests)){
    if(tests[i, "class"] == "numeric"){
      vecA <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
      vecB <- c(1, 1, 1, 3:10)
      vecC <- c(1, 1, 1, NA, NA, 5:10)
      vecD <- c()
      vecE <- c(NA, NA, NA, NA, NA, NA)
      class(vecE) <- "numeric"
      vecF <- c(1L, 2L, 3L, NA, NA, NA, 4L, 4L, 4L)
      vecG <- c(1L, 2L, 3L, NA, NA, NA, NA, 4L, 4L, 4L)
      if(tests[i, "method"] == "last"){
        expect_equal(statamode(vecA, method = tests[i, "method"]), 10)
        expect_equal(statamode(vecB, method = tests[i, "method"]), 1)
        expect_equal(statamode(vecC, method = tests[i, "method"]), 1)
        expect_equal(statamode(vecD, method = tests[i, "method"]), NA)
        expect_equal(statamode(vecE, method = tests[i, "method"]), NA_real_)
        expect_equal(statamode(vecF, method = tests[i, "method"]), 4)
        expect_equal(statamode(vecG, method = tests[i, "method"]), NA_integer_)
      } else if(tests[i, "method"] == "stata"){
        expect_equal(statamode(vecA, method = tests[i, "method"]), ".")
        expect_equal(statamode(vecB, method = tests[i, "method"]), 1)
        expect_equal(statamode(vecC, method = tests[i, "method"]), 1)
        expect_equal(statamode(vecD, method = tests[i, "method"]), ".")
        expect_equal(statamode(vecE, method = tests[i, "method"]), ".")
        expect_equal(statamode(vecF, method = tests[i, "method"]), 4)
        expect_equal(statamode(vecG, method = tests[i, "method"]), NA_integer_)
      } else{
        expect_equal(statamode(vecA, method = tests[i, "method"]), 3)
        expect_equal(statamode(vecB, method = tests[i, "method"]), 1)
        expect_equal(statamode(vecC, method = tests[i, "method"]), 1)
        expect_equal(statamode(vecD, method = tests[i, "method"]), NA)
        expect_equal(statamode(vecE, method = tests[i, "method"]), NA_real_)
        expect_equal(statamode(vecF, method = tests[i, "method"]), 4)
        expect_equal(statamode(vecG, method = tests[i, "method"]), NA_integer_)
      }
    } else if(tests[i, "class"] == "factor"){
        vecA <- c(LETTERS[1:10]); vecA <- factor(vecA)
        vecB <- c("A", "A", "A", LETTERS[3:10]); vecB <- factor(vecB)
        vecC <- c("A", "A", "A", NA, NA, LETTERS[5:10]); vecC <- factor(vecC)
        vecD <- c()
        vecE <- c(NA, NA, NA, NA, NA, NA)
        vecE <- as.factor(vecE)
        vecF <- c("A", "B", "C", NA, NA, NA, "D", "D", "D")
        vecF <- factor(vecF)
        if(tests[i, "method"] == "last"){
          expect_equal(statamode(vecA, method = tests[i, "method"]), "J")
          expect_equal(statamode(vecB, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecC, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecD, method = tests[i, "method"]), NA)
          expect_equal(statamode(vecE, method = tests[i, "method"]), NA_character_)
          expect_equal(statamode(vecF, method = tests[i, "method"]), "D")
        } else if(tests[i, "method"] == "stata"){
          expect_equal(statamode(vecA, method = tests[i, "method"]), ".")
          expect_equal(statamode(vecB, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecC, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecD, method = tests[i, "method"]), ".")
          expect_equal(statamode(vecE, method = tests[i, "method"]), ".")
          expect_equal(statamode(vecF, method = tests[i, "method"]), "D")
        } else{
          expect_equal(statamode(vecA, method = tests[i, "method"]), "G")
          expect_equal(statamode(vecB, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecC, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecD, method = tests[i, "method"]), NA)
          expect_equal(statamode(vecE, method = tests[i, "method"]), "NULL")
          expect_equal(statamode(vecF, method = tests[i, "method"]), "D")
        }
    } else{
        vecA <- c(LETTERS[1:10])
        vecB <- c("A", "A", "A", LETTERS[3:10])
        vecC <- c("A", "A", "A", NA, NA, LETTERS[5:10])
        vecD <- c()
        vecE <- c(NA, NA, NA, NA, NA, NA)
        vecE <- as.character(vecE)
        vecF <- c("A", "B", "C", NA, NA, NA, "D", "D", "D")
        if(tests[i, "method"] == "last"){
          expect_equal(statamode(vecA, method = tests[i, "method"]), "J")
          expect_equal(statamode(vecB, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecC, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecD, method = tests[i, "method"]), NA)
          expect_equal(statamode(vecE, method = tests[i, "method"]), NA_character_)
          expect_equal(statamode(vecF, method = tests[i, "method"]), "D")
        } else if(tests[i, "method"] == "stata"){
          expect_equal(statamode(vecA, method = tests[i, "method"]), ".")
          expect_equal(statamode(vecB, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecC, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecD, method = tests[i, "method"]), NA)
          expect_equal(statamode(vecE, method = tests[i, "method"]), ".")
          expect_equal(statamode(vecF, method = tests[i, "method"]), "D")
        } else{
          expect_equal(statamode(vecA, method = tests[i, "method"]), "B")
          expect_equal(statamode(vecB, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecC, method = tests[i, "method"]), "A")
          expect_equal(statamode(vecD, method = tests[i, "method"]), NA)
          expect_equal(statamode(vecE, method = tests[i, "method"]), NA_character_)
          expect_equal(statamode(vecF, method = tests[i, "method"]), "D")
        }
    }
  }
})

Try the eeptools package in your browser

Any scripts or data that you put into this service are public.

eeptools documentation built on June 7, 2023, 5:06 p.m.