tests/testthat/test-sets.R

library("arules")
library("testthat")

context("set operations")

data <- list(
    c("A", "B"),
    c("A", "B", "C", "G"),
    c("C", "D"),
    c("E", "F"),
    c("A", "B", "C", "D")
    )


### is.superset / is.subset
is <- new("itemsets",  items = as(data, "itemMatrix"))

### find supersets in is
ss <- is.superset(is, is)
expect_identical(colnames(ss), labels(is))
expect_identical(rownames(ss), labels(is))
expect_equal(unname(diag(ss)), rep(TRUE, nrow(ss)))

ss2 <- is.superset(is)
expect_identical(ss, ss2)

ss <- is.superset(is, is, proper = TRUE)
expect_equal(unname(diag(ss)), rep(FALSE, nrow(ss)))

ss <- is.superset(is[5], is)
expect_equal(unname(as(ss, "matrix")), t(c(T, F, T, F, T)))

### sparse (should all be true)
expect_equal(as.matrix(is.superset(is, is)),is.superset(is, is, sparse = FALSE))
expect_equal(as.matrix(is.superset(is)), is.superset(is, sparse = FALSE))
expect_equal(as.matrix(is.superset(is[5], is)), 
  is.superset(is[5], is, sparse = FALSE))
expect_equal(as.matrix(is.superset(is, is, proper=TRUE)),
  is.superset(is, is, proper=TRUE, sparse = FALSE))

### find subsets in is
ss <- is.subset(is, is)
expect_identical(colnames(ss), labels(is))
expect_identical(rownames(ss), labels(is))
expect_equal(unname(diag(ss)), rep(TRUE, nrow(ss)))

ss <- is.subset(is, is, proper = TRUE)
expect_identical(colnames(ss), labels(is))
expect_identical(rownames(ss), labels(is))
expect_equal(unname(diag(ss)), rep(FALSE, nrow(ss)))
  
ss <- is.subset(is[1], is)
expect_equal(unname(as(ss, "matrix")), t(c(T, T, F, F, T)))

### is.maximal
quality(is)$isMaximal <- is.maximal(is)
#inspect(is)
expect_equal(quality(is)$isMaximal, c(F, T, F, T, T))


### is.closed
db <- as(data, "transactions")
is <- eclat(db, parameter = list(supp = 0), control = list(verbose = FALSE))

quality(is) <- cbind(quality(is), isClosed = is.closed(is))
#inspect(is)
expect_equal(quality(is)$isClosed[1:5], c(T, T, F, F, F))


### union, intersection, setequal, setdiff, is.element
rules <- apriori(data, control = list(verbose = FALSE))
r1 <- rules[1:10]
r2 <- rules[6:20]

expect_equal(length(union(r1,r2)), 20L)

expect_equal(length(intersect(r1,r2)), 5L)

expect_false(setequal(r1,r2))
expect_true(setequal(r1,r1))
expect_true(setequal(r1,c(rules[5:10], rules[1:5])))

expect_equal(length(setdiff(r1, r2)), 5L)
expect_equal(length(setdiff(r2, r1)), 10L)

expect_true(is.element(rules[5], r1))
expect_false(is.element(rules[15], r1))

# union(setA,setB)= setA + setB - intersect(setA,setB)
expect_equal(length(union(r1, r2)), length(c(r1, r2)) - length(intersect(r1, r2)))

# Test setequal with incompatible itemMatrices containing the same itemsets
d1 <- as(data, "itemMatrix")
expect_true(setequal(d1,d1))

d2 <- merge(d1[,6:7], d1[,1:5])
compatible(d1, d2)
expect_warning(expect_true(setequal(d1,d2)))
expect_warning(expect_true(setequal(union(d1, d2), intersect(d1, d2))))
mhahsler/arules documentation built on March 19, 2024, 5:45 p.m.