test_that("from is matched as a string", {
f <- mapping("1", "A", ch.as.fact=FALSE)
expect_equal(f(1), "A")
expect_equal(f("1"), "A")
f <- mapping(1, "A", ch.as.fact=FALSE)
expect_equal(f(1), "A")
expect_equal(f("1"), "A")
f <- mapping(c("1"="A"), ch.as.fact=FALSE)
expect_equal(f(1), "A")
expect_equal(f("1"), "A")
f <- mapping(c(`1`="A"), ch.as.fact=FALSE)
expect_equal(f(1), "A")
expect_equal(f("1"), "A")
})
test_that("mapping works with numerics", {
f <- mapping(1:4, 5:8)
expect_equal(f(c(NA, 3, NA, 1, 4, 3, 2, 5)), c(NA, 7, NA, 5, 8, 7, 6, NA))
f <- mapping(1:4, 5:8, ch.as.fact=FALSE)
expect_equal(f(c(NA, 3, NA, 1, 4, 3, 2, 5)), c(NA, 7, NA, 5, 8, 7, 6, NA))
f <- mapping(c("1"=5, "2"=6, "3"=7, "4"=8))
expect_equal(f(c(NA, 3, NA, 1, 4, 3, 2, 5)), c(NA, 7, NA, 5, 8, 7, 6, NA))
})
test_that("mapping works with a single named vector", {
f <- mapping(c("A"="X", "B"="Y", "C"="Z"))
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c(NA, "Y", "Y", "Z", "X", NA), levels=c("X", "Y", "Z")))
})
test_that("mapping works with a two vectors", {
# In the case, the names of from are ignored
f <- mapping(c("D"="A", "E"="B", "F"="C"), c("X", "Y", "Z"))
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c(NA, "Y", "Y", "Z", "X", NA), levels=c("X", "Y", "Z")))
})
test_that("mapping handles factor levels correctly", {
f <- mapping(c("C"="Z", "A"="X", "E"="W", "B"="Y"))
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c(NA, "Y", "Y", "Z", "X", NA), levels=c("Z", "X", "W", "Y")))
})
test_that("mapping works with duplicates", {
f <- mapping(c("A"="X", "B"="Y", "C"="X"))
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c(NA, "Y", "Y", "X", "X", NA), levels=c("X", "Y")))
f <- mapping(c("A"="X", "B"="Y", "A"="Z"))
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c(NA, "Y", "Y", NA, "X", NA), levels=c("X", "Y", "Z")))
})
test_that("mapping works with NA", {
f <- mapping(c("A"="X", "B"=NA, "C"="Z"), na="W")
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c("W", NA, NA, "Z", "X", NA), levels=c("X", "Z", "W")))
f <- mapping(c("A", "B", "C", NA), c("X", NA, "Z", "W"))
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c("W", NA, NA, "Z", "X", NA), levels=c("X", "Z", "W")))
f <- mapping(c("A", "B", "C"), c("X", NA, "Z"), na="W")
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c("W", NA, NA, "Z", "X", NA), levels=c("X", "Z", "W")))
f <- mapping(c("A", "B", "C"), c("X", NA, "Z"), na="W", ch.as.fact=F)
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
c("W", NA, NA, "Z", "X", NA))
f <- mapping(c("A", "B", "C", NA), c("X", NA, "Z", "W"), na="V")
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c("W", NA, NA, "Z", "X", NA), levels=c("X", "Z", "W")))
f <- mapping(1:4, 5:8, na=9)
expect_equal(f(c(NA, 3, NA, 1, 4, 3, 2, 5)), c(9, 7, 9, 5, 8, 7, 6, NA))
})
test_that("reordering factor levels works", {
x <- c("C", "B", "A")
f <- mapping(x)
expect_equal(
f(factor(x)),
factor(c("C", "B", "A"), levels=c("C", "B", "A")))
})
test_that("inverse mapping works", {
f <- mapping(c("A"="X", "B"="Y", "C"="Z"))
expect_equal(
inverse(f)(c(NA, "Y", "Y", "X", "W")),
factor(c(NA, "B", "B", "A", NA), levels=c("A", "B", "C")))
})
test_that("domain and codomain work", {
f <- mapping(c("A"="X", "B"="Y", "C"="Z"))
expect_equal(domain(f), c("A", "B", "C"))
expect_equal(codomain(f), c("X", "Y", "Z"))
})
test_that("text2mapping works", {
f <- text2mapping("
A | X
B | Y
C | Z
")
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c(NA, "Y", "Y", "Z", "X", NA), levels=c("X", "Y", "Z")))
expect_equal(
inverse(f)(c(NA, "Y", "Y", "X", "W")),
factor(c(NA, "B", "B", "A", NA), levels=c("A", "B", "C")))
})
test_that("text2mapping works with extra separators", {
f <- text2mapping("
| A | X |
| B | Y |
| C | Z |
")
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c(NA, "Y", "Y", "Z", "X", NA), levels=c("X", "Y", "Z")))
expect_equal(
inverse(f)(c(NA, "Y", "Y", "X", "W")),
factor(c(NA, "B", "B", "A", NA), levels=c("A", "B", "C")))
})
test_that("text2mapping works with different separator", {
f <- text2mapping(sep="=", "
A = X
B = Y
C = Z
")
expect_equal(
inverse(f)(c(NA, "Y", "Y", "X", "W")),
factor(c(NA, "B", "B", "A", NA), levels=c("A", "B", "C")))
})
test_that("text2mapping works with NA when convert.na=FALSE", {
f <- text2mapping(convert.na=FALSE, "
A | NA
NA | Y
C | Z
")
expect_equal(
f(c(NA, "NA", "NA", "C", "A", "D")),
factor(c(NA, "Y", "Y", "Z", "NA", NA), levels=c("NA", "Y", "Z")))
expect_equal(
inverse(f)(c(NA, "Y", "Y", "NA", "W")),
factor(c(NA, "NA", "NA", "A", NA), levels=c("A", "NA", "C")))
})
test_that("text2mapping works with NA when convert.na=TRUE", {
expect_warning(f <- text2mapping(convert.na=TRUE, "
A | NA
NA | Y
C | Z
"))
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c("Y", NA, NA, "Z", NA, NA), levels=c("Y", "Z")))
expect_equal(
inverse(f)(c(NA, "Y", "Y", "X", "W")),
factor(c("A", NA, NA, NA, NA), levels=c("A", "C")))
})
test_that("text2mapping works with numeric values", {
f <- text2mapping("
1 | 3.4
2 | 5.6
3 | 7.8
")
expect_equal(f(c(3, 3, 1, 3, 2)), c(7.8, 7.8, 3.4, 7.8, 5.6))
f <- text2mapping(numericWherePossible=FALSE, "
1 | 3.4
2 | 5.6
3 | 7.8
")
expect_equal(f(c(3, 3, 1, 3, 2)),
factor(c(7.8, 7.8, 3.4, 7.8, 5.6), levels=c(3.4, 5.6, 7.8)))
})
test_that("text2mapping passes ... to mapping", {
f <- text2mapping(na="W", "
A | X
B | Y
C | Z
")
expect_equal(
f(c(NA, "B", "B", "C", "A", "D")),
factor(c("W", "Y", "Y", "Z", "X", NA), levels=c("X", "Y", "Z", "W")))
f <- text2mapping(ch.as.fact=FALSE, "
A | X
B | Y
C | Z
")
expect_equal(f(c(NA, "B", "B", "C", "A", "D")), c(NA, "Y", "Y", "Z", "X", NA))
})
test_that("cut_mapping works", {
x <- c(0, 10, 20, 30, Inf)
m <- cut_mapping(x, right=FALSE,
to=c("0 to <10", "10 to <20", "20 to <30", ">= 30"))
expect_equal(
m(c(5, 27, 3, 10, 99)),
factor(c("0 to <10", "20 to <30", "0 to <10", "10 to <20", ">= 30"),
levels=c("0 to <10", "10 to <20", "20 to <30", ">= 30")))
})
test_that("pmapping/unmapped works as expected", {
x <- LETTERS[1:5]
expect_equal(mapping(x, 1:5)(x), 1:5)
expect_equal(
mapping(x[2:3], 2:3)(x),
c(NA, 2, 3, NA, NA))
expect_equal(
mapping(x[2:3], 2:3, unmapped=-99)(x),
c(-99, 2, 3, -99, -99))
expect_equal(
mapping(x[2:3], 2:3, unmapped=I)(x),
c("A", "2", "3", "D", "E")) # Note: conversion to character
expect_equal(
pmapping(x[2:3], 2:3)(x),
mapping(x[2:3], 2:3, unmapped=I)(x)) # Same as above
expect_equal(
mapping("B", "Z")(x),
factor(c(NA, "Z", NA, NA, NA), levels="Z"))
expect_equal(
mapping("B", "Z", unmapped=NA)(x),
mapping("B", "Z")(x))
expect_equal(
mapping("B", "Z", unmapped="QQQ")(x),
factor(c("QQQ", "Z", "QQQ", "QQQ", "QQQ"), levels=c("Z", "QQQ")))
expect_equal(
mapping("B", "Z", unmapped="QQQ", ch.as.fact=F)(x),
c("QQQ", "Z", "QQQ", "QQQ", "QQQ"))
expect_equal(
pmapping("B", "Z")(x),
factor(c("A", "Z", "C", "D", "E"), levels=c("Z", "A", "C", "D", "E")))
expect_equal(
pmapping("B", "Z", ch.as.fact=FALSE)(x),
c("A", "Z", "C", "D", "E"))
expect_equal(
mapping("B", "Z", unmapped=mapping("A", "Y"))(x),
factor(c("Y", "Z", NA, NA, NA), levels=c("Z", "Y")))
expect_equal(
pmapping(3, -99)(1:5),
c(1, 2, -99, 4, 5))
x <- c("3.1", "BQL", "2.7", "100")
expect_equal(
mapping("BQL", -99, unmapped=as.numeric)(x),
c(3.1, -99, 2.7, 100))
x <- c("X", "Y")
expect_equal(
mapping("X", "Y")(x),
factor(c("Y", NA), levels="Y"))
expect_equal(
pmapping("X", "Y")(x),
factor(c("Y", "Y"), levels="Y"))
x <- factor(c("X", "Y"))
expect_equal(
mapping("X", "Y")(x),
factor(c("Y", NA), levels="Y"))
expect_equal(
pmapping("X", "Y")(x),
factor(c("Y", "Y"), levels=c("Y", "X")))
expect_equal(
pmapping("X", "Y", ch.as.fact=FALSE)(x),
c("Y", "Y"))
})
# vim: ts=2 sw=2 et
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.