# rm(list=ls())
# library(testthat)
# test_file("tests/testthat/test-calc_rate.R")
# covr::file_coverage("R/calc_rate.R", "tests/testthat/test-calc_rate.R")
# cvr <- covr::package_coverage()
# covr::report(cvr)
# covr::report(covr::package_coverage())
capture.output({ ## stops printing outputs on assigning
# this avoids hundreds of "multi column detected" warnings
sard_data <- sardine.rd[,1:2]
test_that("calc_rate - outputs object of class calc_rate", {
cr <- calc_rate(sard_data, plot = F)
expect_is(cr,
"calc_rate")
})
test_that("calc_rate - subsetting methods work and produce correct outputs", {
cr <- calc_rate(sard_data, from = 2000, to = 4000, by = "time", plot = F)
expect_is(cr,
"calc_rate")
expect_equal(as.numeric(cr$subsets[[1]][1,1]),
2000)
expect_equal(as.numeric(cr$subsets[[1]][nrow(cr$subsets[[1]]),1]),
4000)
cr <- calc_rate(sard_data, 2000, 4000, by = "row", plot = F)
expect_is(cr,
"calc_rate")
expect_equal(nrow(cr$subsets[[1]]),
2001)
cr <- calc_rate(sard_data, 94, 93, by = "oxygen", plot = F)
expect_is(cr,
"calc_rate")
expect_equal(as.numeric(cr$subsets[[1]][1,2]),
94)
expect_equal(as.numeric(cr$subsets[[1]][nrow(cr$subsets[[1]]),2]),
93)
})
test_that("calc_rate - S3 generics work", {
cr <- calc_rate(sard_data, from = 2000, to = 4000, plot = F)
expect_output(print(cr))
expect_output(summary(cr))
expect_output(plot(cr))
expect_output(suppressWarnings(mean(cr)))
# multiple rates and 'pos'
cr <- calc_rate(sard_data, from = 2000:2020, to = 4000:4020, plot = F)
expect_output(print(cr, pos = 2))
expect_error(print(cr, pos = 2:3),
"print.calc_rate: 'pos' must be a single value. To examine multiple results use summary().")
expect_error(print(cr, pos = 30),
"print.calc_rate: Invalid 'pos' rank: only 21 rates found.")
expect_output(summary(cr, pos = 2:3))
expect_error(summary(cr, pos = 40),
"summary.calc_rate: Invalid 'pos' rank: only 21 rates found.")
expect_is(summary(cr, pos = 2:3, export = TRUE),
"data.frame")
expect_output(mean(cr, pos = 2:3))
expect_error(mean(cr, pos = 40),
"mean.calc_rate: Invalid 'pos' rank: only 21 rates found.")
expect_is(mean(cr, pos = 2:3, export = TRUE),
"numeric")
expect_equal(mean(cr, pos = 2:3, export = TRUE),
mean(cr$rate[2:3]))
# pos default applied
expect_output(plot(cr, pos = NULL))
expect_output(plot(cr, pos = 1))
expect_output(plot(cr, pos = 3))
expect_error(plot(cr, pos = 50),
"calc_rate: Invalid 'pos' rank: only 21 rates found.")
expect_error(plot(cr, pos = 1:2),
"calc_rate: 'pos' should be a single value.")
# panel
expect_output(plot(cr, panel = 1))
expect_error(plot(cr, panel = 5),
"plot.calc_rate: 'panel' input should be 1 to 4 or 'NULL' for all.")
})
test_that("calc_rate - calling linear_fit (calc_rate) produces coefficients", {
expect_equal(c("intercept_b0", "slope_b1", "rsq"),
names(linear_fit(sard_data)))
})
test_that("calc_rate works with variations of `by` input", {
expect_error(calc_rate(sard_data, plot = F, by = "Time"), regexp = NA)
expect_error(calc_rate(sard_data, plot = F, by = "T"), regexp = NA)
expect_error(calc_rate(sard_data, plot = F, by = "Oxygen"), regexp = NA)
expect_error(calc_rate(sard_data, plot = F, by = "oxygen"), regexp = NA)
expect_error(calc_rate(sard_data, plot = F, by = "Row"), regexp = NA)
expect_error(calc_rate(sard_data, plot = F, by = "r"), regexp = NA)
})
test_that("calc_rate - stops with wrong 'by' inputs", {
expect_error(calc_rate(sard_data, plot = F, by = "tttimmmeee"),
"'by' input not valid or not recognised")
})
test_that("calc_rate - correctly extracts dataframe from 'inspect' objects", {
insp <- inspect(sard_data[1000:2000,], plot = F)
cr <- calc_rate(insp, plot = F)
expect_identical(cr$dataframe,
insp$dataframe)
})
test_that("calc_rate - stops with non data.frame 'x' input", {
expect_error(calc_rate(as.matrix(sard_data), plot = F),
"calc_rate: Input must be a 'data.frame' or 'inspect' object.")
})
test_that("calc_rate - stops when 'x' input has only 1 row of data", {
expect_error(calc_rate(sardine.rd[1,], plot = F),
"calc_rate: Input data contains only 1 row. Please check inputs.")
})
test_that("calc_rate - message with multi column input", {
expect_message(calc_rate(urchins.rd, plot = F),
"calc_rate: Multi-column dataset detected in input.")
})
test_that("calc_rate - calcs rate over all available data if to and from are NULL", {
cr <- calc_rate(sard_data[1000:2000,], from = NULL, to = NULL, plot = F)
expect_identical(cr$dataframe,
cr$subsets[[1]])
expect_identical(nrow(cr$dataframe),
cr$summary$endrow)
})
test_that("calc_rate - correctly handles 'from' NULL", {
urch <- urchins.rd[20:200,1:2]
expect_error(calc_rate(urch, from = NULL, to = 20, by = "time", plot = FALSE),
regexp = NA)
expect_equal(calc_rate(urch, from = NULL, to = 20, by = "time", plot = FALSE)$summary$time,
urch[[1]][1])
expect_error(calc_rate(urch, from = NULL, to = 20, by = "row", plot = FALSE),
regexp = NA)
expect_equal(calc_rate(urch, from = NULL, to = 20, by = "row", plot = FALSE)$summary$row,
1)
expect_error(calc_rate(urch, from = NULL, to = 7, by = "oxygen", plot = FALSE),
regexp = NA)
expect_equal(calc_rate(urch, from = NULL, to = 7, by = "oxygen", plot = FALSE)$summary$oxy,
urch[[2]][1])
})
test_that("calc_rate - correctly handles 'to' NULL", {
urch <- urchins.rd[20:200,1:2]
expect_error(calc_rate(urch, from = 5, to = NULL, by = "time", plot = FALSE),
regexp = NA)
expect_equal(calc_rate(urch, from = 5, to = NULL, by = "time", plot = FALSE)$summary$endtime,
urch[[1]][181])
expect_error(calc_rate(urch, from = 5, to = NULL, by = "row", plot = FALSE),
regexp = NA)
expect_equal(calc_rate(urch, from = 5, to = NULL, by = "row", plot = FALSE)$summary$endrow,
181)
expect_error(calc_rate(urch, from = 7.5, to = NULL, by = "oxygen", plot = FALSE),
regexp = NA)
expect_equal(calc_rate(urch, from = 7.5, to = NULL, by = "oxygen", plot = FALSE)$summary$endoxy,
urch[[2]][181])
})
test_that("calc_rate - correctly handles 'from' and 'to' NULL", {
urch <- urchins.rd[20:200,1:2]
# all NULL - deafults - applies by= "time"
expect_error(calc_rate(urch),
regexp = NA)
expect_equal(calc_rate(urch)$summary$time,
urch[[1]][1])
expect_equal(calc_rate(urch)$summary$endtime,
urch[[1]][nrow(urch)])
expect_equal(calc_rate(urch)$summary$oxy,
urch[[2]][1])
expect_equal(calc_rate(urch)$summary$endoxy,
urch[[2]][nrow(urch)])
# by "row"
expect_error(calc_rate(urch, by = "row"),
regexp = NA)
expect_equal(calc_rate(urch, by = "row")$summary$row,
1)
expect_equal(calc_rate(urch, by = "row")$summary$endrow,
181)
expect_equal(calc_rate(urch, by = "row")$summary$oxy,
urch[[2]][1])
expect_equal(calc_rate(urch, by = "row")$summary$endoxy,
urch[[2]][nrow(urch)])
# by "oxygen"
expect_error(calc_rate(urch, by = "oxygen"),
regexp = NA)
expect_equal(calc_rate(urch, by = "oxygen")$summary$row,
1)
expect_equal(calc_rate(urch, by = "oxygen")$summary$endrow,
181)
expect_equal(calc_rate(urch, by = "oxygen")$summary$oxy,
urch[[2]][1])
expect_equal(calc_rate(urch, by = "oxygen")$summary$endoxy,
urch[[2]][nrow(urch)])
})
test_that("calc_rate - stops if 'from' and 'to' are unequal length", {
expect_error(calc_rate(sard_data[1000:2000,], from = c(5,10,15), to = c(100,105), plot = F, by = "time"),
"calc_rate: 'from' and 'to' have unequal lengths.")
expect_error(calc_rate(sard_data[1000:2000,], from = 5, to = c(100,105), plot = F, by = "oxy"),
"calc_rate: 'from' and 'to' have unequal lengths.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(5,10,15), to = c(100,105), plot = F, by = "row"),
"calc_rate: 'from' and 'to' have unequal lengths.")
})
test_that("calc_rate - stops if any paired 'from' and 'to' are of equal value", {
expect_error(calc_rate(sard_data[1000:2000,], from = 5, to = 5, plot = F, by = "time"),
"some 'from' values are equal to the paired values in 'to'.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(5,6,7), to = c(4,6,8), plot = F, by = "oxy"),
"some 'from' values are equal to the paired values in 'to'.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(5,6,7), to = c(4,6,8), plot = F, by = "row"),
"some 'from' values are equal to the paired values in 'to'.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(4,4,6), to = c(6,6,6), plot = F, by = "oxy"),
"some 'from' values are equal to the paired values in 'to'.")
})
# by = "time" checks ------------------------------------------------------
test_that("calc_rate - by = 'time' stops with time values out of order", {
by <- "time"
expect_error(calc_rate(sard_data[1000:2000,], from = 1600, to = 1500, plot = F, by = by),
"calc_rate: some 'from' time values are later than the paired values in 'to'.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(1200, 1600), to = c(1300, 1500), plot = F, by = by),
"calc_rate: some 'from' time values are later than the paired values in 'to'.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(1200, 1600, 1800), to = c(1300, 1500, 1900), plot = F, by = by),
"calc_rate: some 'from' time values are later than the paired values in 'to'.")
})
test_that("calc_rate - by = 'time' stops with time values out of range of available data", {
by <- "time"
expect_error(calc_rate(sard_data[1000:2000,], from = 2000, to = 2500, plot = F, by = by),
"calc_rate: some 'from' time values are higher than the values present in 'x'")
expect_error(calc_rate(sard_data[1000:2000,], from = c(1500, 1600, 2100), to = c(1800, 1900, 2200), plot = F, by = by),
"calc_rate: some 'from' time values are higher than the values present in 'x'.")
expect_error(calc_rate(sard_data[1000:2000,], from = 400, to = 800, plot = F, by = by),
"calc_rate: some 'to' time values are lower than the values present in 'x'")
expect_error(calc_rate(sard_data[1000:2000,], from = c(1500, 1600, 400), to = c(1800, 1900, 600), plot = F, by = by),
"calc_rate: some 'to' time values are lower than the values present in 'x'")
})
test_that("calc_rate - by = 'time' warns with time values out of range, but uses closest available value", {
by <- "time"
expect_message(calc_rate(sard_data[1000:2000,], from = 900, to = 1500, plot = F, by = by),
"calc_rate: some 'from' time values are lower than the values present in 'x'. The lowest time value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data[1000:2000,], from = 900, to = 1500, plot = F, by = by)$summary$time[1]),
999)
expect_message(calc_rate(sard_data[1000:2000,], from = c(800, 900, 1000), to = c(1500, 1600, 1700), plot = F, by = by),
"calc_rate: some 'from' time values are lower than the values present in 'x'. The lowest time value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data[1000:2000,], from = c(800, 900, 1000), to = c(1500, 1600, 1700), plot = F, by = by)$summary$time[1:3]),
c(999,999,1000))
expect_message(calc_rate(sard_data[1000:2000,], from = 1500, to = 2200, plot = F, by = by),
"calc_rate: some 'to' time values are higher than the values present in 'x'. The highest time value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data[1000:2000,], from = 1500, to = 2200, plot = F, by = by)$summary$endtime[1]),
1999)
expect_message(calc_rate(sard_data[1000:2000,], from = c(1500, 1600, 1700), to = c(1900, 2200, 2500), plot = F, by = by),
"calc_rate: some 'to' time values are higher than the values present in 'x'. The highest time value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data[1000:2000,], from = c(1500, 1600, 1700), to = c(1900, 2200, 2500), plot = F, by = by)$summary$endtime[1:3]),
c(1900,1999,1999))
})
test_that("calc_rate - by = 'time' outputs correct results", {
by <- "time"
from <- 1000
to <- 1999
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
as.numeric(lm(sard_data$Oxygen[(from+1):(to+1)]~sard_data$Time[(from+1):(to+1)])$coefficients[2]))
## try a bunch of values
from <- round(seq(1000, 5000, length.out = 20))
to <- round(seq(2000, 7000, length.out = 20))
mapply(function(p,q) expect_equal(calc_rate(sard_data, from = p, to = q, plot = F, by = by)$rate,
as.numeric(lm(sard_data$Oxygen[(p+1):(q+1)]~sard_data$Time[(p+1):(q+1)])$coefficients[2])),
p = from,
q = to)
## as a multiple from/to input
rates <- mapply(function(p,q) as.numeric(lm(sard_data$Oxygen[(p+1):(q+1)]~sard_data$Time[(p+1):(q+1)])$coefficients[2]),
p = from,
q = to)
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
rates)
})
test_that("calc_rate - by = 'time' outputs correct results with oxygen production data", {
by <- "time"
sardine_rev <- sard_data
sardine_rev[[2]] <- rev(sardine_rev[[2]])
from <- 1000
to <- 1999
expect_equal(calc_rate(sardine_rev, from = from, to = to, plot = F, by = by)$rate,
as.numeric(lm(sardine_rev$Oxygen[(from+1):(to+1)]~sardine_rev$Time[(from+1):(to+1)])$coefficients[2]))
## try a bunch of values
from <- round(seq(1000, 5000, length.out = 20))
to <- round(seq(2000, 7000, length.out = 20))
mapply(function(p,q) expect_equal(calc_rate(sardine_rev, from = p, to = q, plot = F, by = by)$rate,
as.numeric(lm(sardine_rev$Oxygen[(p+1):(q+1)]~sardine_rev$Time[(p+1):(q+1)])$coefficients[2])),
p = from,
q = to)
## as a multiple from/to input
rates <- mapply(function(p,q) as.numeric(lm(sardine_rev$Oxygen[(p+1):(q+1)]~sardine_rev$Time[(p+1):(q+1)])$coefficients[2]),
p = from,
q = to)
expect_equal(calc_rate(sardine_rev, from = from, to = to, plot = F, by = by)$rate,
rates)
## same region from reversed data outputs same rate
from <- 1000
to <- 1999
from_rev <- nrow(sard_data)-to-1
to_rev <- nrow(sard_data)-from-1
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
calc_rate(sardine_rev, from = from_rev, to = to_rev, plot = F, by = by)$rate * -1)
## try a bunch of values
from <- round(seq(1000, 5000, length.out = 20))
to <- round(seq(2000, 7000, length.out = 20))
from_rev <- nrow(sard_data)-to-1
to_rev <- nrow(sard_data)-from-1
mapply(function(p,q,r,s) expect_equal(calc_rate(sard_data, from = p, to = q, plot = F, by = by)$rate,
calc_rate(sardine_rev, from = r, to = s, plot = F, by = by)$rate * -1),
p = from,
q = to,
r = from_rev,
s = to_rev)
})
# by = "row" checks -------------------------------------------------------
test_that("calc_rate - by = 'row' errors with row values out of order", {
by <- "row"
expect_error(calc_rate(sard_data, from = 600, to = 500, plot = F, by = by),
"calc_rate: some 'from' row numbers are higher than the paired values in 'to'.")
expect_error(calc_rate(sard_data, from = c(1200, 1600), to = c(1300, 1500), plot = F, by = by),
"calc_rate: some 'from' row numbers are higher than the paired values in 'to'.")
expect_error(calc_rate(sard_data, from = c(1200, 1600, 1800), to = c(1300, 1500, 1900), plot = F, by = by),
"calc_rate: some 'from' row numbers are higher than the paired values in 'to'.")
})
test_that("calc_rate - by = 'row' stops with 'from' row numbers out of range of available data", {
by <- "row"
expect_error(calc_rate(sard_data[1000:2000,], from = 2000, to = 2500, plot = F, by = by),
"calc_rate: some 'from' row numbers are beyond the number of rows present in 'x'.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(100, 200, 1100), to = c(300, 400, 1400), plot = F, by = by),
"calc_rate: some 'from' row numbers are beyond the number of rows present in 'x'.")
})
test_that("calc_rate - by = 'row' warns with 'to' row values out of range, but uses last row value", {
by <- "row"
expect_message(calc_rate(sard_data[1000:2000,], from = 900, to = 1500, plot = F, by = by),
"calc_rate: some 'to' row numbers are higher than the number of rows present in 'x'. The final row number will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data[1000:2000,], from = 900, to = 1500, plot = F, by = by)$summary$endrow[1]),
1001)
expect_message(calc_rate(sard_data[1000:2000,], from = c(500, 600, 700), to = c(900, 1000, 1100), plot = F, by = by),
"calc_rate: some 'to' row numbers are higher than the number of rows present in 'x'. The final row number will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data[1000:2000,], from = c(500, 600, 700), to = c(900, 1000, 1100), plot = F, by = by)$summary$endrow[1:3]),
c(900,1000,1001))
})
test_that("calc_rate - by = 'row' outputs correct results", {
by <- "row"
from <- 1000
to <- 1999
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
as.numeric(lm(sard_data$Oxygen[(from):(to)]~sard_data$Time[(from):(to)])$coefficients[2]))
## try a bunch of values
from <- round(seq(1000, 5000, length.out = 20))
to <- round(seq(2000, 7000, length.out = 20))
mapply(function(p,q) expect_equal(calc_rate(sard_data, from = p, to = q, plot = F, by = by)$rate,
as.numeric(lm(sard_data$Oxygen[(p):(q)]~sard_data$Time[(p):(q)])$coefficients[2])),
p = from,
q = to)
## as a multiple from/to input
rates <- mapply(function(p,q) as.numeric(lm(sard_data$Oxygen[(p):(q)]~sard_data$Time[(p):(q)])$coefficients[2]),
p = from,
q = to)
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
rates)
})
test_that("calc_rate - by = 'row' outputs correct results with oxygen production data", {
by <- "row"
sardine_rev <- sard_data
sardine_rev[[2]] <- rev(sardine_rev[[2]])
from <- 1000
to <- 1999
expect_equal(calc_rate(sardine_rev, from = from, to = to, plot = F, by = by)$rate,
as.numeric(lm(sardine_rev$Oxygen[(from):(to)]~sardine_rev$Time[(from):(to)])$coefficients[2]))
## try a bunch of values
from <- round(seq(1000, 5000, length.out = 20))
to <- round(seq(2000, 7000, length.out = 20))
mapply(function(p,q) expect_equal(calc_rate(sardine_rev, from = p, to = q, plot = F, by = by)$rate,
as.numeric(lm(sardine_rev$Oxygen[(p):(q)]~sardine_rev$Time[(p):(q)])$coefficients[2])),
p = from,
q = to)
## as a multiple from/to input
rates <- mapply(function(p,q) as.numeric(lm(sardine_rev$Oxygen[(p):(q)]~sardine_rev$Time[(p):(q)])$coefficients[2]),
p = from,
q = to)
expect_equal(calc_rate(sardine_rev, from = from, to = to, plot = F, by = by)$rate,
rates)
## same region from reversed data outputs same rate
from <- 1000
to <- 1999
from_rev <- nrow(sard_data)-to+1
to_rev <- nrow(sard_data)-from+1
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
calc_rate(sardine_rev, from = from_rev, to = to_rev, plot = F, by = by)$rate * -1)
## try a bunch of values
from <- round(seq(1000, 5000, length.out = 20))
to <- round(seq(2000, 7000, length.out = 20))
from_rev <- nrow(sard_data)-to+1
to_rev <- nrow(sard_data)-from+1
mapply(function(p,q,r,s) expect_equal(calc_rate(sard_data, from = p, to = q, plot = F, by = by)$rate,
calc_rate(sardine_rev, from = r, to = s, plot = F, by = by)$rate * -1),
p = from,
q = to,
r = from_rev,
s = to_rev)
})
# by = "oxygen" checks --------------------------------------------------------
test_that("calc_rate - by = 'oxygen' stops with paired values of from and to *both* below or *both* above oxygen data range", {
by <- "oxygen"
expect_error(calc_rate(sard_data[1000:2000,], from = 90, to = 85, plot = F, by = by),
"calc_rate: some paired 'from' and 'to' values are both below the range of oxygen data in 'x'.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(90,93.9), to = c(85,94.4), plot = F, by = by),
"calc_rate: some paired 'from' and 'to' values are both below the range of oxygen data in 'x'.")
expect_error(calc_rate(sard_data[1000:2000,], from = 100, to = 98, plot = F, by = by),
"calc_rate: some paired 'from' and 'to' values are both above the range of oxygen data in 'x'.")
expect_error(calc_rate(sard_data[1000:2000,], from = c(100,93.9), to = c(98,94.4), plot = F, by = by),
"calc_rate: some paired 'from' and 'to' values are both above the range of oxygen data in 'x'.")
})
test_that("calc_rate - by = 'oxygen' warns with oxygen values out of range, but uses closest available value", {
by <- "oxygen"
# range is 89.7 to 95.7
# single values, one above
expect_message(calc_rate(sard_data, from = 100, to = 93, plot = F, by = by),
"calc_rate: some 'from' oxygen values are higher than the values in 'x'. The highest available value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data, from = 100, to = 93, plot = F, by = by)$summary$time[1]),
0)
expect_equal(suppressWarnings(calc_rate(sard_data, from = 100, to = 93, plot = F, by = by)$summary$row[1]),
1)
expect_message(calc_rate(algae.rd, from = 92, to = 97, plot = F, by = by),
"calc_rate: some 'from' oxygen values are lower than the values in 'x'. The lowest available value will be used instead.")
expect_equal(suppressWarnings(calc_rate(algae.rd, from = 92, to = 97, plot = F, by = by)$summary$time[1]),
0.02)
expect_equal(suppressWarnings(calc_rate(algae.rd, from = 92, to = 97, plot = F, by = by)$summary$row[1]),
1)
# single values, one below
expect_message(calc_rate(sard_data, from = 95, to = 80, plot = F, by = by),
"calc_rate: some 'to' oxygen values are lower than the values in 'x'. The lowest available value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data, from = 95, to = 80, plot = F, by = by)$summary$endtime[1]),
sard_data$Time[nrow(sard_data)])
expect_equal(suppressWarnings(calc_rate(sard_data, from = 95, to = 80, plot = F, by = by)$summary$endrow[1]),
nrow(sard_data))
# single values, one above, one below
expect_message(calc_rate(sard_data, from = 100, to = 80, plot = F, by = by),
"calc_rate: some 'to' oxygen values are lower than the values in 'x'. The lowest available value will be used instead.")
expect_message(calc_rate(sard_data, from = 100, to = 80, plot = F, by = by),
"calc_rate: some 'from' oxygen values are higher than the values in 'x'. The highest available value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data, from = 100, to = 80, plot = F, by = by)$summary$time[1]),
0)
expect_equal(suppressWarnings(calc_rate(sard_data, from = 100, to = 80, plot = F, by = by)$summary$row[1]),
1)
expect_equal(suppressWarnings(calc_rate(sard_data, from = 100, to = 80, plot = F, by = by)$summary$endtime[1]),
sard_data$Time[nrow(sard_data)])
expect_equal(suppressWarnings(calc_rate(sard_data, from = 100, to = 80, plot = F, by = by)$summary$endrow[1]),
nrow(sard_data))
# multiple values, one above
expect_message(calc_rate(sard_data, from = c(100,95), to = c(93,92), plot = F, by = by),
"calc_rate: some 'from' oxygen values are higher than the values in 'x'. The highest available value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data, from = c(100,95), to = c(93,92), plot = F, by = by)$summary$time[1]),
0)
expect_equal(suppressWarnings(calc_rate(sard_data, from = c(100,95), to = c(93,92), plot = F, by = by)$summary$row[1]),
1)
# multiple values, one below
expect_message(calc_rate(sard_data, from = c(95,94), to = c(80,92), plot = F, by = by),
"calc_rate: some 'to' oxygen values are lower than the values in 'x'. The lowest available value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data, from = c(95,94), to = c(80,92), plot = F, by = by)$summary$endtime[1]),
sard_data$Time[nrow(sard_data)])
expect_equal(suppressWarnings(calc_rate(sard_data, from = c(95,94), to = c(80,92), plot = F, by = by)$summary$endrow[1]),
nrow(sard_data))
# multiple values, one above, one below
expect_message(calc_rate(sard_data, from = c(100,94), to = c(80,92), plot = F, by = by),
"calc_rate: some 'to' oxygen values are lower than the values in 'x'. The lowest available value will be used instead.")
expect_message(calc_rate(sard_data, from = c(100,94), to = c(80,92), plot = F, by = by),
"calc_rate: some 'from' oxygen values are higher than the values in 'x'. The highest available value will be used instead.")
expect_equal(suppressWarnings(calc_rate(sard_data, from = c(100,94), to = c(80,92), plot = F, by = by)$summary$time[1]),
0)
expect_equal(suppressWarnings(calc_rate(sard_data, from = c(100,94), to = c(80,92), plot = F, by = by)$summary$row[1]),
1)
expect_equal(suppressWarnings(calc_rate(sard_data, from = c(100,94), to = c(80,92), plot = F, by = by)$summary$endtime[1]),
sard_data$Time[nrow(sard_data)])
expect_equal(suppressWarnings(calc_rate(sard_data, from = c(100,94), to = c(80,92), plot = F, by = by)$summary$endrow[1]),
nrow(sard_data))
})
test_that("calc_rate - by = 'oxygen' outputs correct results", {
by <- "oxygen"
from <- 94
to <- 91
sub <- sard_data[min(which(dplyr::between(sard_data[[2]], to, from))):max(which(dplyr::between(sard_data[[2]], to, from))),]
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
as.numeric(lm(sub[[2]]~sub[[1]])$coefficients[2]))
## try a bunch of values
#from <- (seq(95, 91, length.out = 20))
#to <- (seq(94, 90, length.out = 20))
from <- runif(100, max = 96, min = 93)
to <- runif(100, max = 93, min = 90)
for(i in 1:length(from)){
sub <- sard_data[min(which(dplyr::between(sard_data[[2]], to[i], from[i]))):max(which(dplyr::between(sard_data[[2]], to[i], from[i]))),]
expect_equal(calc_rate(sard_data, from = from[i], to = to[i], plot = F, by = by)$rate,
as.numeric(lm(sub[[2]]~sub[[1]])$coefficients[2]))
}
## as a multiple from/to input
rates <- c()
for(i in 1:length(from)){
sub <- sard_data[min(which(dplyr::between(sard_data[[2]], to[i], from[i]))):max(which(dplyr::between(sard_data[[2]], to[i], from[i]))),]
rates[i] <- as.numeric(lm(sub[[2]]~sub[[1]])$coefficients[2])
}
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
rates)
})
test_that("calc_rate - by = 'oxygen' - check 'from' and 'to' are interchangeable", {
by <- "oxygen"
from <- 94
to <- 91
sub <- sard_data[min(which(dplyr::between(sard_data[[2]], to, from))):max(which(dplyr::between(sard_data[[2]], to, from))),]
expect_equal(calc_rate(sard_data, from = from, to = to, plot = F, by = by)$rate,
calc_rate(sard_data, from = to, to = from, plot = F, by = by)$rate)
## try a bunch of values
from <- runif(100, max = 96, min = 93)
to <- runif(100, max = 93, min = 90)
for(i in 1:length(from)){
sub <- sard_data[min(which(dplyr::between(sard_data[[2]], to[i], from[i]))):max(which(dplyr::between(sard_data[[2]], to[i], from[i]))),]
expect_equal(calc_rate(sard_data, from = from[i], to = to[i], plot = F, by = by)$rate,
calc_rate(sard_data, from = to[i], to = from[i], plot = F, by = by)$rate)
}
})
test_that("calc_rate - by = 'oxygen' outputs correct results with oxygen production data", {
by <- "oxygen"
sardine_rev <- sard_data
sardine_rev[[2]] <- rev(sardine_rev[[2]])
from <- 94
to <- 91
sub <- sardine_rev[min(which(dplyr::between(sardine_rev[[2]], to, from))):max(which(dplyr::between(sardine_rev[[2]], to, from))),]
expect_equal(calc_rate(sardine_rev, from = from, to = to, plot = F, by = by)$rate,
as.numeric(lm(sub[[2]]~sub[[1]])$coefficients[2]))
## try a bunch of values
from <- runif(100, max = 96, min = 93)
to <- runif(100, max = 93, min = 90)
for(i in 1:length(from)){
sub <- sardine_rev[min(which(dplyr::between(sardine_rev[[2]], to[i], from[i]))):max(which(dplyr::between(sardine_rev[[2]], to[i], from[i]))),]
expect_equal(calc_rate(sardine_rev, from = from[i], to = to[i], plot = F, by = by)$rate,
as.numeric(lm(sub[[2]]~sub[[1]])$coefficients[2]))
}
## as a multiple from/to input
rates <- c()
for(i in 1:length(from)){
sub <- sardine_rev[min(which(dplyr::between(sardine_rev[[2]], to[i], from[i]))):max(which(dplyr::between(sardine_rev[[2]], to[i], from[i]))),]
rates[i] <- as.numeric(lm(sub[[2]]~sub[[1]])$coefficients[2])
}
expect_equal(calc_rate(sardine_rev, from = from, to = to, plot = F, by = by)$rate,
rates)
## same region from reversed data outputs same rate
from <- runif(100, max = 96, min = 93)
to <- runif(100, max = 93, min = 90)
from_rev <- to
to_rev <- from
mapply(function(p,q,r,s) expect_equal(calc_rate(sard_data, from = p, to = q, plot = F, by = by)$rate,
calc_rate(sardine_rev, from = r, to = s, plot = F, by = by)$rate * -1),
p = from,
q = to,
r = from_rev,
s = to_rev)
})
# Plot defaults -----------------------------------------------------------
test_that("calc_rate - plot defaults are correctly restored", {
# reset plotting first
dev.off()
# save par before
parb4 <- par(no.readonly = TRUE)
# now use a fn with plot
suppressWarnings(calc_rate(urchins.rd))
# save after
paraft <- par(no.readonly = TRUE)
# mai is something changed from the default,
# so if par settings not restored properly this should fail
expect_identical(parb4$mai,
paraft$mai)
})
}) ## end capture.output
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.