library(testthat)
context("errors")
library(penaltyLearning)
data(neuroblastomaProcessed, package="penaltyLearning")
fit <- with(neuroblastomaProcessed, IntervalRegressionUnregularized(
feature.mat[, c("log.hall", "log.n")], target.mat))
no.name.mat <- matrix(c(1, 1, 1, NA), 2, 2)
test_that("predict without all pred col names is an error", {
expect_error({
fit$predict(no.name.mat)
}, "columns needed for prediction but not present: log.hall, log.n")
})
named.mat <- no.name.mat
colnames(named.mat) <- c("log.hall", "log.n")
pred.vec <- predict(fit, named.mat)#also tests S3 method.
test_that("predict NA results in NA", {
expect_identical(as.logical(is.na(pred.vec)), c(FALSE, TRUE))
})
ok.targets <- rbind(
c(1, 2),
c(3, 4))
test_that("error for missing prediction", {
expect_error({
targetIntervalROC(ok.targets, pred.vec)
}, "missing")
})
test_that("error for infinite prediction", {
expect_error({
targetIntervalROC(ok.targets, c(1, Inf))
}, "infinite")
})
test_that("error for wrong size prediction", {
expect_error({
targetIntervalROC(ok.targets, 1:3)
}, "length(pred) must be same as nrow(target.mat)", fixed=TRUE)
})
test_that("error for no finite limit", {
expect_error({
targetIntervalROC(rbind(ok.targets, c(-Inf, Inf)), 1:3)
}, "each row of target.mat must have at least one finite limit")
})
ok3 <- rbind(ok.targets, c(-1, 5))
test_that("no error for finite limits", {
roc.list <- targetIntervalROC(ok3, 1:3)
expect_is(roc.list$thresholds, "data.table")
expect_is(roc.list$auc.polygon, "data.table")
expect_is(roc.list$roc, "data.table")
expect_is(roc.list$auc, "numeric")
})
test_that("error for row vector predictions", {
expect_error({
targetIntervalROC(ok3, rbind(bar=1:3))
}, "nrow(pred) must be same as nrow(target.mat)", fixed=TRUE)
})
test_that("no error for one col vector predictions", {
roc.list <- targetIntervalROC(ok3, cbind(foo=1:3))
expect_is(roc.list$thresholds, "data.table")
expect_is(roc.list$auc.polygon, "data.table")
expect_is(roc.list$roc, "data.table")
expect_is(roc.list$auc, "numeric")
})
test_that("error for two col vector predictions", {
expect_error({
targetIntervalROC(ok3, cbind(foo=1:3, bar=2:4))
}, "length(pred) must be same as nrow(target.mat)", fixed=TRUE)
})
test_that("S3 coef method returns numeric matrix with dimnames", {
expect_is(fit, "IntervalRegression")
result <- coef(fit)
expect_is(result, "matrix")
expect_true(is.numeric(result))
expect_identical(dimnames(result), list(
c("(Intercept)", "log.hall", "log.n"),
"0"))
})
test_that("error for more than two columns in target Unregularized", {
expect_error({
with(neuroblastomaProcessed, IntervalRegressionUnregularized(
target.mat, feature.mat))
}, "target.mat should be a numeric matrix with two columns (lower and upper limits of correct outputs)", fixed=TRUE)
})
test_that("error for more than two columns in target CV", {
expect_error({
with(neuroblastomaProcessed, IntervalRegressionCV(
target.mat, feature.mat))
}, "target.mat should be a numeric matrix with two columns (lower and upper limits of correct outputs)", fixed=TRUE)
})
test_that("error for different number of rows", {
expect_error({
with(neuroblastomaProcessed, IntervalRegressionCV(
feature.mat[1:100,], target.mat[1:200,]))
}, "feature.mat and target.mat should have the same number of rows", fixed=TRUE)
})
test_that("error for constant features", {
expect_error({
with(neuroblastomaProcessed, IntervalRegressionCV(
cbind(x=rep(1, 200)), target.mat[1:200,]))
}, "after filtering NA and constant features, none remain for training")
})
test_that("error for NA features", {
expect_error({
with(neuroblastomaProcessed, IntervalRegressionCV(
cbind(x=rep(NA_real_, 200)), target.mat[1:200,]))
}, "after filtering NA features, none remain for training")
})
test_that("error for NA and constant features", {
expect_error({
with(neuroblastomaProcessed, IntervalRegressionCV(
cbind("NA"=rep(NA_real_, 200), constant=rep(1, 200)), target.mat[1:200,]))
}, "after filtering NA and constant features, none remain for training")
})
test_that("error for un-named features", {
expect_error({
with(neuroblastomaProcessed, IntervalRegressionCV(
cbind(rnorm(200)), target.mat[1:200,]))
}, "feature.mat should be a numeric matrix with colnames (input features)", fixed=TRUE)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.