tests/testthat/test-xmv.R

context("xmv")

test_that("metadata can be mapped", {
  set.seed(1)
  met <- data.table::data.table(id = 1:5, condition=letters[1:5], sex=c("M","M","M","F", "F"), key="id")
  t <- 1L:100L
  data <- met[,list(t=t, x=rnorm(100),y=rnorm(100), eating=runif(100) > .5 ),by="id"]
  d <- behavr(data,met)

  d[, .(xmv(sex))]

  expect_equivalent(d[xmv(sex) == "M"],
                   data[met[sex=="M"]][,colnames(data),with=F])

  expect_equal(d[,.(sex=xmv(sex))],
               data[met][,.(sex)])

  # we remove metadata
  # Variables should be NA for missing metadata now

  setmeta(d, meta(d)[sex=="M"])
  expect_true(nrow(d[xmv(sex) == "F"])==0)
  d[, condition:= xmv(condition)]
  expect_identical(ifelse(data[met][,sex] == "M", data[met][,condition], NA), d$condition)
})


test_that("xmv cannot be called from outside of `[]`, and only on `behavr` tables", {
  met <- data.table::data.table(id = 1:5, condition=letters[1:5], sex=c("M","M","M","F", "F"), key="id")

  expect_error(xmv(1), "only be called from inside the `\\[\\]`")
  expect_error(xmv(), "only be called from inside the `\\[\\]`")
  expect_error(xmv(letters), "only be called from inside the `\\[\\]`")


  expect_error(met[xmv(1)], "not a behavr object")

})


test_that("missing variables", {
  met <- data.table::data.table(id = 1:5, condition=letters[1:5], sex=c("M","M","M","F", "F"), key="id")
  t <- 1L:100L
  data <- met[,list(t=t, x=rnorm(100),y=rnorm(100), eating=runif(100) > .5 ),by="id"]
  d <- behavr(data,met)
  expect_error(d[xmv(w)], "No metavariable named")

})
rethomics/behavr documentation built on June 15, 2021, 2:05 p.m.