tests/testthat/test-popsub.R

context("Population subset tests")

test_that("subsetting needs a genind object", {
  expect_error(popsub(1:10), "popsub requires a genind or genlight object\n")
})

test_that("sublist needs to match populations", {
  data(microbov, package = "adegenet")
  expect_error(popsub(microbov, "missingno"), 
               poppr:::unmatched_pops_warning(popNames(microbov), "missingno"))
})

test_that("sum of the pops equal the whole", {
  data(microbov, package = "adegenet")
  mb1to7  <- popsub(microbov, 1:7)
  mb8to15 <- popsub(microbov, 8:15)
  expect_that(nInd(mb1to7) + nInd(mb8to15), equals(nInd(microbov)))
  })

test_that("subsetting works with populations", {
  data(nancycats, package = "adegenet")
  temp  <- nancycats@pop=="P04" | nancycats@pop=="P08"
  p48   <- nancycats[temp, ]
  p4    <- nancycats[nancycats@pop == "P04", , drop = TRUE]
  nan48 <- popsub(nancycats, c(4, 8), drop = FALSE)
  
  # Matrices equivalent
  expect_that(nan48@tab, equals(p48@tab))
  ## Dropping columns
  expect_that(popsub(nan48, "P04")@tab, equals(p4@tab))
  expect_that(popsub(nan48, 1)@tab, equals(p4@tab))
  expect_that(popsub(nancycats, 4)@tab, equals(p4@tab))
  # Populations equivalent
  expect_that(as.character(pop(nan48)), is_identical_to(as.character(pop(p48))))
  # Individuals equivalent
  expect_that(indNames(nan48), is_identical_to(indNames(p48)))
  # Rejects unknown populations
  expect_that(popsub(nancycats, 18), gives_warning())
  # Rejects old arguments
  expect_warning({
    popsub(nancycats, blacklist = 1:5)
  }, "exclude = 1:5")
  # Rejects equivalent exclude and sublist
  ## As numeric
  expect_that(popsub(nancycats, sublist = 1, exclude = 1), gives_warning())
  ## As characters
  expect_that(popsub(nancycats, sublist = "P01", exclude = "P01"), gives_warning())
  expect_that(popsub(nancycats, sublist = "P01", exclude = 1), gives_warning())
  expect_that(popsub(nancycats, sublist = 1, exclude = "P01"), gives_warning())
  expect_that(popsub(nancycats, sublist = c(4, 8), exclude = c(4, 8)), 
              gives_warning())
  expect_that(popsub(nancycats, sublist = c(4, 8), exclude = "P08")@tab, 
              equals(p4@tab))
  # numeric and character are the same
  expect_that(popsub(nancycats, c("P04", "P08"), drop = FALSE)@tab, equals(nan48@tab))
})

test_that("subsetting doesn't work without populations", {
  data(partial_clone, package = "poppr")
  p1 <- 1:50 %% 4 == 1
  expect_that(nInd(popsub(partial_clone, 1)), equals(nInd(partial_clone[p1, ])))
  expect_that(popsub(partial_clone, 1)@tab, equals(partial_clone[p1, , drop = TRUE]@tab))
  pop(partial_clone) <- NULL
  expect_that(popsub(partial_clone, 1), gives_warning())
})

test_that("subsetting works with genclone objects", {
  data(nancycats, package = "adegenet")
  temp      <- nancycats@pop=="P04" | nancycats@pop=="P08"
  p48       <- nancycats[temp, ]
  p4        <- nancycats[nancycats@pop == "P04", , drop = TRUE]
  nancycats <- as.genclone(nancycats)
  nan48     <- popsub(nancycats, c(4, 8), drop = FALSE)
  
  # Matrices equivalent
  expect_that(nan48@tab, equals(p48@tab))
  ## Dropping columns
  expect_that(popsub(nan48, "P04")@tab, equals(p4@tab))
  expect_that(popsub(nan48, 1)@tab, equals(p4@tab))
  expect_that(popsub(nancycats, 4)@tab, equals(p4@tab))
  # Populations equivalent
  expect_that(as.character(pop(nan48)), is_identical_to(as.character(pop(p48))))
  # Individuals equivalent
  expect_that(indNames(nan48), is_identical_to(indNames(p48)))
  # Rejects unknown populations
  expect_that(popsub(nancycats, 18), gives_warning())
  # Rejects equivalent exclude and sublist
  ## As numeric
  expect_that(popsub(nancycats, sublist = 1, exclude = 1), gives_warning())
  ## As characters
  expect_that(popsub(nancycats, sublist = "P01", exclude = "P01"), gives_warning())
  expect_that(popsub(nancycats, sublist = "P01", exclude = 1), gives_warning())
  expect_that(popsub(nancycats, sublist = 1, exclude = "P01"), gives_warning())
  expect_that(popsub(nancycats, sublist = c(4, 8), exclude = c(4, 8)), 
              gives_warning())
  expect_that(popsub(nancycats, sublist = c(4, 8), exclude = "P08")@tab, 
              equals(p4@tab))
  # numeric and character are the same
  expect_that(popsub(nancycats, c("P04", "P08"), drop = FALSE)@tab, equals(nan48@tab))
})
grunwaldlab/poppr documentation built on March 18, 2024, 11:24 p.m.