context("Testing ragged helper functions")
test_that("ragged2char() works properly", {
expect_identical( ragged2char(list(1:2, 1:3, 1:4)),
matrix(c(" 1", " 2", NA, NA,
" 1", " 2", " 3", NA,
" 1", " 2", " 3", " 4" ),
nrow = 3, byrow = TRUE))
expect_identical( ragged2char(list(1:2, 1:3, 1:4), filler = 0),
matrix(c(" 1", " 2", "0", "0",
" 1", " 2", " 3", "0",
" 1", " 2", " 3", " 4" ),
nrow = 3, byrow = TRUE))
expect_identical( ragged2char(list(1:2, 1:3, 1:4), filler = " 0"),
matrix(c(" 1", " 2", " 0", " 0",
" 1", " 2", " 3", " 0",
" 1", " 2", " 3", " 4" ),
nrow = 3, byrow = TRUE))
})
test_that("new() and raggedCoef() create objects as documented", {
ragged1 <- list(1, 2:3, 4:6)
ragged2 <- list(a = 1, b = 2:3, c = 4:6)
ragged3na <- list(NA_real_, rep(NA_real_,2), rep(NA_real_,3))
ragged3zero <- list(0, rep(0,2), rep(0,3))
ragA <- new("raggedCoef", 1, 2:3, 4:6)
ragB <- new("raggedCoef", list(1, 2:3, 4:6))
ragC <- new("raggedCoef", list(a = 1, b = 2:3, c = 4:6))
ragC1 <- new("raggedCoef", a = 1, b = 2:3, c = 4:6)
ragD <- new("raggedCoef", p = c(1, 2, 3), a = ragged1)
ragD1 <- new("raggedCoef", a = ragged1, p = c(1, 2, 3))
expect_identical(ragD, ragD1)
expect_equal(row_lengths(ragged1), row_lengths(ragB))
ragD[] <- 11:16
expect_equal(ragD@a, list(11, 12:13, 14:16))
ragD[3] <- 24:26
ragD[1:2] <- list(41, 42:43)
expect_error(ragD[1:2] <- list(41:42, 42:43),
"The length of raggedCoef objects cannot be changed by replacement")
# # note: 17, not 16:
expect_error(ragD[] <- 11:17,
"Wrong length of right-hand side")
expect_error(ragD[] <- list(11, 12:13, 14:17),
"Replacement value should be consistent with the current one")
ragD[] <- list(11, 12:13, 14:16)
ragD[[3, 2]] <- 32
ragD[3, 1] <- 31
ragD[2] <- c(210, 220)
expect_error(ragD[2] <- c(210),
"Right-hand side must have at least p.i. elements")
ragD[] <- matrix(c(11, 0, 0,
12, 13, 0,
14, 15, 16 ), byrow = TRUE, nrow = 3)
ragD[1:2] <- matrix(c(61, 0,
62, 63 ), byrow = TRUE, nrow = 2)
expect_error(ragD[] <- matrix(c(11, 0,
12, 13,
14, 15 ), byrow = TRUE, nrow = 3),
"Right-hand side must have at least max.p. columns")
expect_error(ragD[2:3] <- matrix(c(11, 0,
12, 13,
14, 15 ), byrow = TRUE, nrow = 3),
"Right-hand side must have at least max[^ ]* columns")
expect_warning(new("raggedCoef", ragged1, p = c(1, 2, 3)),
"When the coef are in a list, other arguments are ignored")
## when given separately, coefficients must all be numeric, here the last one is a list
expect_error(new("raggedCoef", a = 1, b = 2:3, c = 4:6, list(5:8)),
"Wrong arguments for raggedCoef initialization")
expect_identical(ragA, ragB)
expect_identical(ragC, ragC1)
## ## check that show() does not give errors
for(obj in list(ragA, ragC))
expect_output(show(obj))
# changing since identical(1:3,c(1,2,3)) gives FALSE!
# expect_identical(ragA@p, (c(1,2,3)))
expect_equal(ragA@p, c(1,2,3))
expect_equal(ragA@a, ragged1)
expect_identical(ragC@a, ragged2)
expect_equivalent(ragC@a, ragged1)
expect_false(identical(ragC@a, ragged1))
raggedCoef(ragged1)
rag1 <- raggedCoef(value = ragA) # init from raggedCoef object, same as rag2 <- ragA
expect_identical(rag1, ragA)
rag1na <- raggedCoef(1:3) # only order given, fill with NA's
expect_equal(rag1na@p, 1:3)
expect_identical(rag1na@a, ragged3na)
rag1zero <- raggedCoef(1:3, 0) # fill with a number (zero in this case)
expect_equal(rag1zero@p, 1:3)
expect_identical(rag1zero@a, ragged3zero)
rag2 <- raggedCoef(value = ragged1) # init with a list
expect_identical(rag2, ragB)
rag3 <- raggedCoef(p = 1:3, value = 1:6) # init with a numeric vector
# todo: currently raggedCoef@a may contain numeric and/or integer entries.
# should "numeric" be enforced?
# expect_identical(rag3, (ragB))
expect_equal(rag3, ragB)
# inconsistent 1st arg. and value
expect_error(raggedCoef(c(2,2,3), value = ragged1))
expect_output(show(raggedCoef(c(0,0,0))),
"All components are of length 0")
})
test_that("subsetting raggedCoef objects with '[[' works as expected", {
ragA <- new("raggedCoef", 1, 2:3, 4:6)
ragged1 <- list(1, 2:3, 4:6)
expect_identical(ragA[[1]], (ragged1[[1]]))
expect_identical(ragA[[2]], (ragged1[[2]]))
expect_identical(ragA[[3]], (ragged1[[3]]))
expect_identical(ragA[[1,1]], (ragged1[[c(1,1)]]))
expect_identical(ragA[[2,1]], (ragged1[[c(2,1)]]))
expect_identical(ragA[[2,2]], (ragged1[[c(2,2)]]))
expect_identical(ragA[[3,1]], (ragged1[[c(3,1)]]))
expect_identical(ragA[[3,2]], (ragged1[[c(3,2)]]))
expect_identical(ragA[[3,3]], (ragged1[[c(3,3)]]))
expect_error(ragA[[1,2]])
expect_error(ragA[[1,3]])
expect_error(ragA[[2,3]])
expect_error(ragA[[1:2]])
})
test_that("subsetting raggedCoef objects with '[' works as expected", {
ragA <- new("raggedCoef", 1, 2:3, 4:6)
m <- matrix(c(1,0,0,
2,3,0,
4,5,6), ncol = 3, byrow = TRUE)
expect_identical(ragA[1], (ragA[1,]))
expect_identical(ragA[2], (ragA[2,]))
expect_identical(ragA[], (m))
expect_identical(ragA[1], (m[1,]))
expect_identical(ragA[2], (m[2,]))
expect_identical(ragA[3], (m[3,]))
expect_identical(ragA[1:2], (m[1:2, ]))
expect_identical(ragA[2:3], (m[2:3, ]))
expect_identical(ragA[c(1,3)], (m[c(1,3), ]))
expect_identical(ragA[ , 1], (m[ , 1]))
expect_identical(ragA[ , 2], (m[ , 2]))
expect_identical(ragA[ , 3], (m[ , 3]))
expect_identical(ragA[ , 2:3], (m[ , 2:3]))
expect_identical(ragA[1,1], (m[1,1]))
expect_identical(ragA[2,1], (m[2,1]))
expect_identical(ragA[2,2], (m[2,2]))
expect_identical(ragA[3,1], (m[3,1]))
expect_identical(ragA[3,2], (m[3,2]))
expect_identical(ragA[3,3], (m[3,3]))
expect_equal(ragA[1,2], 0)
expect_equal(ragA[1,3], 0)
expect_equal(ragA[2,3], 0)
expect_identical(ragA[1:2,1:2], (m[1:2,1:2]))
})
test_that("replacing parts of raggedCoef objects with '[[<-' works as expected", {
ragA <- new("raggedCoef", 1, 2:3, 4:6)
ragged1 <- list(1, 2:3, 4:6)
ragAa <- ragA
ragAa[[2]] <- c(22,33)
expect_identical(ragAa[[2]], (c(22,33)))
# replacement value should have same length as current value
expect_error(ragAa[[1]] <- c(22,33))
expect_error(ragAa[[3]] <- c(22,33))
ragAa[[2,2]] <- 44
expect_identical(ragAa[[2]], (c(22,44)))
})
test_that("ragged2vec() works properly", {
ragA <- new("raggedCoef", 1, 2:3, 4:6)
ragged1 <- list(1, 2:3, 4:6)
expect_equal(ragged2vec(ragA), 1:6)
# raggedCoef is to some extent the inverse of ragged2vec
expect_equal(raggedCoef(p = ragA@p, value = ragged2vec(ragA)), ragA)
## '['
ragAb <- new("raggedCoef", 6:4, 3:2, 1)
ragAc <- raggedCoef(1:3, 6:1)
ragAr <- ragA
ragAr[] <- 6:1
expect_equal(ragAr, ragAc)
expect_equal(ragAr, ragAc)
})
test_that("dim() and similar work properly", {
ragC <- new("raggedCoef", list(a = 1, b = 2:3, c = 4:7))
## todo: these functions should probably be forcd to return integer results
## and these tests changed to use expect_identical
expect_equal(dim(ragC), c(3L, 4L))
expect_equal(nrow(ragC), 3L)
expect_equal(NROW(ragC), 3L)
expect_equal(ncol(ragC), 4L)
expect_equal(NCOL(ragC), 4L)
expect_equal(length(ragC), 7)
expect_false(anyNA(ragC))
## TODO: this assigns the value, even though the first "row" is of length 1.
## I don't remember if this was by design (hardly!).
## ragC[1, 2] <- 6
ragC[2, 1] <- NA_real_
expect_true(anyNA(ragC))
})
test_that("ragged2vec() works properly", {
ragA <- new("raggedCoef", 1, 2:3, 4:6)
ragged1 <- list(1, 2:3, 4:6)
expect_that(ragged2vec(ragA), equals(1:6))
# raggedCoef is to some extent the inverse of ragged2vec
expect_that(raggedCoef(p = ragA@p, value = ragged2vec(ragA)), equals(ragA))
})
test_that("rag_modify() works properly", {
rag <- new("raggedCoef", 1, 2:3, 4:6)
rag <- rag_modify(rag, 6:1)
expect_that(rag@a, equals(list(6,5:4,3:1)))
expect_that(ragged2vec(rag), equals(6:1))
})
# todo: "[<-"
# todo: ragged2char
# todo: show - how to test this non-interactively?
# todo: row_lengths
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.