library(dplyr)
test_that("Updating triple retains cohesiveness", {
broken_brauer <- brauer_2008_triple
broken_brauer$features <- broken_brauer$features %>% mutate(foo = "bar")
expect_error(check_tomic(broken_brauer), "permutation")
broken_brauer <- brauer_2008_triple
broken_brauer$features$name <- factor(broken_brauer$features$name)
expect_error(check_tomic(broken_brauer), "classes")
})
test_that("Test check_tidy_omic edge cases", {
testthat::expect_s3_class(simple_tidy, "tidy_omic")
double_data_tidy <- simple_tidy
double_data_tidy$data <- rbind(double_data_tidy$data, double_data_tidy$data)
# duplicated feature, sample, measurement tuples
expect_snapshot(check_tidy_omic(double_data_tidy, fast_check = FALSE), error = TRUE)
degenerate_attributes <- three_col_df %>%
mutate(
degen_sample_var = rep(1:10, each = 10),
degen_feature_var = rep(1:10, times = 10)
)
# check verbose message
expect_message(
create_tidy_omic(
three_col_df,
feature_pk = "features",
sample_pk = "samples"
),
regexp = "1 measurement variables"
)
expect_snapshot(
create_tidy_omic(
degenerate_attributes %>% select(-degen_sample_var),
feature_pk = "features",
sample_pk = "samples",
feature_var = "degen_feature_var",
verbose = FALSE
),
error = TRUE)
expect_snapshot(
create_tidy_omic(
degenerate_attributes %>% select(-degen_feature_var),
feature_pk = "features",
sample_pk = "samples",
sample_var = "degen_sample_var",
verbose = FALSE
),
error = TRUE)
# inconsistencies between data and design
simple_tidy_missing_join_1 <- simple_tidy
simple_tidy_missing_join_1$data <- simple_tidy_missing_join_1$data %>%
dplyr::select(-features)
expect_error(
check_tomic(simple_tidy_missing_join_1),
regex = "features: are present in the design but not data.frames"
)
simple_tidy_missing_join_2 <- simple_tidy
simple_tidy_missing_join_2$data <- simple_tidy_missing_join_2$data %>%
dplyr::mutate(foo = "bar")
expect_error(
check_tomic(simple_tidy_missing_join_2),
regex = "foo: are present in the data.frames but not in the design"
)
})
test_that("Factor primary keys are preserved when converting from a tidy to a triple", {
tidy <- create_tidy_omic(
three_col_df_fct,
feature_pk = "features",
sample_pk = "samples",
verbose = FALSE
)
# catch failure case
expect_snapshot(
create_tidy_omic(
three_col_df_fct,
feature_pk = "features",
sample_pk = "samples",
sample_vars = "measurement",
feature_vars = "measurement",
verbose = FALSE
),
error = TRUE
)
triple_from_tidy <- tomic_to(tidy, "triple_omic")
triple_from_tidy_check_status <- romic::check_tomic(triple_from_tidy, fast_check = FALSE)
expect_equal(triple_from_tidy_check_status, 0)
tidy_with_pcs <- add_pcs(tidy, verbose = FALSE)
expect_true(sum(stringr::str_detect(colnames(tidy_with_pcs$data), "^PC")) > 1)
})
test_that("Numeric primary keys are preserved when converting from a tidy to a triple", {
triple_from_tidy <- tomic_to(simple_tidy, "triple_omic")
triple_from_tidy_check_status <- check_tomic(triple_from_tidy, fast_check = FALSE)
expect_equal(triple_from_tidy_check_status, 0)
tidy_with_pcs <- add_pcs(simple_tidy, verbose = FALSE)
expect_true(sum(stringr::str_detect(colnames(tidy_with_pcs$data), "^PC")) > 1)
})
test_that("Create triple omic", {
testthat::expect_s3_class(simple_triple, "triple_omic")
# works without providing features or samples
triple_omic <- create_triple_omic(
triple_setup$measurement_df,
feature_pk = "feature_id",
sample_pk = "sample_id"
)
testthat::expect_s3_class(simple_triple, "triple_omic")
# works when providing features and samples df
triple_omic_full <- create_triple_omic(
triple_setup$measurement_df,
feature_df = triple_setup$feature_df,
sample_df = triple_setup$samples_df,
feature_pk = "feature_id",
sample_pk = "sample_id"
)
testthat::expect_s3_class(simple_triple, "triple_omic")
})
test_that("Test check_triple_omic edge cases", {
# inconsistent classes of primary and foreign keys
simple_triple_class_inconsistency <- simple_triple
simple_triple_class_inconsistency$features$feature_id <-
factor(simple_triple_class_inconsistency$features$feature_id)
expect_error(
check_triple_omic(simple_triple_class_inconsistency),
"feature_id classes differ between the features"
)
simple_triple_class_inconsistency_samples <- simple_triple
simple_triple_class_inconsistency_samples$samples$sample_id <-
factor(simple_triple_class_inconsistency_samples$samples$sample_id)
expect_error(
check_triple_omic(simple_triple_class_inconsistency_samples),
"sample_id classes differ between the samples"
)
# degenerate entries
nonunique_feature_ids <- simple_triple
nonunique_feature_ids$features <- dplyr::bind_rows(
nonunique_feature_ids$features,
nonunique_feature_ids$features
)
expect_error(
check_triple_omic(nonunique_feature_ids, fast_check = FALSE),
"10 features were present multiple times with"
)
nonunique_sample_ids <- simple_triple
nonunique_sample_ids$samples <- dplyr::bind_rows(
nonunique_sample_ids$samples,
nonunique_sample_ids$samples
)
expect_error(
check_triple_omic(nonunique_sample_ids, fast_check = FALSE),
"5 samples were present multiple times with"
)
nonunique_measurements <- simple_triple
nonunique_measurements$measurements <- dplyr::bind_rows(
nonunique_measurements$measurements,
nonunique_measurements$measurements
)
expect_error(
check_triple_omic(nonunique_measurements, fast_check = FALSE),
"50 measurements were present multiple times with"
)
})
test_that("Unstructured data preserved using tomic_to", {
triple_omic <- tomic_to(simple_triple, "triple_omic")
triple_omic$unstructured$dat <- "test"
tidy_copy <- triple_to_tidy(triple_omic)
expect_equal(tidy_copy$unstructured$dat, "test")
triple_restore <- tidy_to_triple(tidy_copy)
expect_equal(triple_restore$unstructured$dat, "test")
})
test_that("Read wide data", {
wide_measurements <- brauer_2008_triple[["measurements"]] %>%
tidyr::spread(sample, expression)
wide_df <- brauer_2008_triple[["features"]] %>%
left_join(wide_measurements, by = "name")
tidy_omic <- convert_wide_to_tidy_omic(
wide_df,
feature_pk = "name",
feature_vars = c("BP", "MF", "systematic_name"),
verbose = FALSE
)
testthat::expect_s3_class(tidy_omic, "tidy_omic")
})
test_that("Catch corner cases when reading wide data", {
wide_measurements <- brauer_2008_triple[["measurements"]] %>%
tidyr::spread(sample, expression)
wide_df <- brauer_2008_triple[["features"]] %>%
left_join(wide_measurements, by = "name")
# reserved name is used
wide_df_w_reserved <- wide_df %>%
dplyr::rename(entry_number = name)
expect_error(
convert_wide_to_tidy_omic(
wide_df_w_reserved,
feature_pk = "entry_number"
),
"entry_number are reserved variable names"
)
wide_df_nonunique_feature_id <- wide_df
wide_df_nonunique_feature_id$name[1:5] <- wide_df_nonunique_feature_id$name[1]
expect_snapshot(
convert_wide_to_tidy_omic(
wide_df_nonunique_feature_id,
feature_pk = "name"
)
)
})
test_that("Find primary or foreign keys in tomic table", {
expect_equal(get_identifying_keys(brauer_2008_triple, "measurements"), c("name", "sample"))
expect_equal(get_identifying_keys(brauer_2008_triple, "features"), "name")
expect_equal(get_identifying_keys(brauer_2008_triple, "samples"), "sample")
# enable
expect_snapshot(
get_identifying_keys(brauer_2008_triple, "foo"),
error = TRUE
)
})
test_that("Test that get_tomic_table() can retrieve various tables", {
tidy_df <- get_tomic_table(brauer_2008_triple, "tidy")
expect_equal(nrow(tidy_df), 18000)
expect_equal(infer_tomic_table_type(brauer_2008_triple, tidy_df), "measurements")
samples_df <- get_tomic_table(simple_tidy, "samples")
expect_equal(dim(samples_df), c(10,1))
expect_equal(infer_tomic_table_type(simple_tidy, samples_df), "samples")
expect_snapshot(
infer_tomic_table_type(simple_tidy, samples_df %>% rename(fake_samples = samples)),
error = TRUE
)
})
test_that("reform_tidy_omic() can create a tidy_omic object from its attributes", {
tidy_data <- romic::brauer_2008_tidy$data
tomic <- reform_tidy_omic(tidy_data, romic::brauer_2008_tidy$design)
expect_s3_class(tomic, "tidy_omic")
})
test_that("Catch corner cases when interconverting tomics", {
# check tomic only works on tidy and triple omics
expect_snapshot(
check_tomic(mtcars),
error = TRUE
)
expect_snapshot(
tomic_to(romic::brauer_2008_tidy, "foo"),
error = TRUE
)
# tomic but not a tidy or triple
weird_s3_classes_tomic <- romic::brauer_2008_tidy
class(weird_s3_classes_tomic) <- "tomic"
expect_error(
check_tomic(weird_s3_classes_tomic),
"tomic is not a tidy_omic or triple_omic. This is unexpected since"
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.