context("test-union")
test_that("union works", {
relations <- data.frame(
sets = c(rep("a", 5), "b", "c"),
elements = letters[seq_len(7)]
)
a <- tidySet(relations)
b <- union(a, c("c", "b"), "d")
expect_s4_class(b, "TidySet")
expect_equal(name_sets(b), "d")
expect_equal(name_elements(b), c("f", "g"))
# Simple case with duplicate relations
relations <- data.frame(
sets = c(rep("a", 5), "b", "c"),
elements = c(letters[seq_len(6)], letters[6])
)
a <- tidySet(relations)
b <- union(a, c("c", "b"), "d")
expect_s4_class(b, "TidySet")
expect_equal(name_sets(b), "d")
expect_equal(name_elements(b), "f")
})
test_that("union works fuzzy", {
relations <- data.frame(
sets = c(rep("a", 5), "b", "c"),
elements = c(letters[seq_len(6)], letters[6]),
fuzzy = runif(7)
)
a <- tidySet(relations)
b <- union(a, c("c", "b"), "d")
expect_s4_class(b, "TidySet")
expect_equal(name_sets(b), "d")
expect_equal(name_elements(b), "f")
expect_equal(b@relations$fuzzy, max(a@relations$fuzzy[6:7]))
d <- union(a, c("a", "c"), "d")
expect_s4_class(d, "TidySet")
expect_equal(name_sets(d), "d")
expect_equal(name_elements(d), letters[1:6])
})
test_that("union keep", {
relations <- data.frame(
sets = c(rep("A", 4), "B", "C", "D"),
elements = letters[seq_len(7)]
)
a <- tidySet(relations)
b <- union(a, c("A", "C"), "E", keep = TRUE)
expect_s4_class(b, "TidySet")
expect_length(name_sets(b), 5L)
expect_equal(nSets(b), nSets(a) + 1)
})
test_that("union works fuzzy keep", {
relations <- data.frame(
sets = c(rep("a", 5), "b", "c"),
elements = c(letters[seq_len(6)], letters[6]),
fuzzy = runif(7)
)
a <- tidySet(relations)
b <- union(a, c("c", "b"), "d", keep = TRUE)
expect_s4_class(b, "TidySet")
expect_equal(nSets(b), nSets(a) + 1)
expect_equal(b@relations$fuzzy[8], max(a@relations$fuzzy[6:7]))
d <- union(a, c("a", "c"), "d", keep = TRUE)
expect_s4_class(d, "TidySet")
expect_equal(nSets(d), nSets(a) + 1)
expect_equal(name_sets(d), name_sets(b))
expect_equal(name_elements(d), letters[1:6])
})
test_that("check coherence", {
relations <- data.frame(
sets = c("A", "A", "A", "A", "B", "C", "D"),
elements = c("a", "b", "c", "d", "e", "f", "g")
)
a <- tidySet(relations = relations)
b <- union(a, c("A", "B"), "AuB")
d <- union(a, c("A", "B"), "AuB", keep = TRUE)
expect_equal(nSets(b) + 4, nSets(d))
})
test_that("fapply works in order", {
fuzzy_set <- new("TidySet",
elements = structure(
list(elements = structure(1:6,
.Label = c("a", "b", "c", "d", "e", "f"),
class = "factor"
)),
class = "data.frame", row.names = c(NA, -6L)
),
sets = structure(list(sets = structure(1:2,
.Label = c("A", "B"),
class = "factor"
)),
class = "data.frame",
row.names = c(NA, -2L)
),
relations = structure(list(
sets = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L),
.Label = c("A", "B"), class = "factor"
),
elements = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 6L),
.Label = c("a", "b", "c", "d", "e", "f"),
class = "factor"
),
fuzzy = c(
0.183724598027766, 0.45670090126805, 0.815207473235205,
0.580061004729941, 0.572497315471992, 0.938118239864707,
0.946015807567164
)
),
class = "data.frame", row.names = c(NA, -7L)
)
)
df <- as.data.frame(union(fuzzy_set, c("A", "B"), "D", keep = TRUE))
expect_equal(df$fuzzy[df$elements == "b" & df$sets == "A"],
df$fuzzy[df$elements == "b" & df$sets == "D"])
})
test_that("union pass other arguments to FUN", {
set.seed(98632187)
relations <- data.frame(
sets = c(rep("A", 5), rep("B", 5)),
elements = c(letters[1:5], letters[2:6]),
fuzzy = runif(10)
)
a <- tidySet(relations)
q <- function(x, quantile) {quantile(x, probs = quantile)}
r <- union(a, c("A", "B"), "C", FUN = q, quantile = 0.5)
expect_equal(relations(r)$fuzzy[relations(r)$elements == "b"],
unname(q(relations$fuzzy[relations$elements == "b"], 0.5)))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.