context("evalMissingData")
# setup horizon-level data: data are from lab sampled pedons
# sprinkle-in some NA
# added fake contact to the bottom via R, Cr, Cd
d <- read.csv(
textConnection('series,name,top,bottom,clay,frags,ph
auburn,A,0,3,21,6,NA
auburn,AB,3,15,21,13,5.6
auburn,Bw,15,25,20,9,5.8
auburn,R,25,47,21,28,5.8
dunstone,A,0,5,16,13,6
dunstone,AB,5,17,17,19,6.3
dunstone,Bt,17,31,20,6,6.3
dunstone,Cr,31,41,21,15,6.3
sobrante,A,0,5,18,0,5.8
sobrante,Ab,5,10,16,2,5.7
sobrante,Bt1,10,28,15,21,5.8
sobrante,Bt2,28,51,NA,NA,NA
sobrante,Cd,51,74,20,12,6.2'), stringsAsFactors = FALSE)
# establish site-level data
s <- data.frame(
series = c('auburn', 'dunstone', 'sobrante'),
precip = c(24, 30, 32),
stringsAsFactors = FALSE
)
# upgrade to SoilProfile Collection object
depths(d) <- series ~ top + bottom
site(d) <- s
## tests
test_that("runs as expected", {
# does it run?
e.rel <- evalMissingData(d, vars = c('clay', 'frags', 'ph'), name = 'name', method = 'relative')
e.abs <- evalMissingData(d, vars = c('clay', 'frags', 'ph'), name = 'name', method = 'absolute')
e.hz <- evalMissingData(d, vars = c('clay', 'frags', 'ph'), name = 'name', method = 'horizon')
# result is a numeric vector
expect_true(inherits(e.rel, 'numeric'))
expect_true(inherits(e.abs, 'numeric'))
expect_true(inherits(e.hz, 'numeric'))
# there should be no NA in profile-level summaries
expect_true(all(is.na(e.rel) == FALSE))
expect_true(all(is.na(e.abs) == FALSE))
# expected lengths
expect_true(length(e.rel) == length(d))
expect_true(length(e.abs) == length(d))
expect_true(length(e.hz) == nrow(d))
# check against hand-computed results
# as.vector removes names attr
# auburn
expect_equal(as.vector(e.rel[1]), 22 / 25, tolerance = 0.001)
expect_equal(as.vector(e.abs[1]), 22 , tolerance = 0.001)
# first hz of auburn is missing pH
expect_equal(as.vector(e.hz[1]), 2/3, tolerance = 0.001)
# dunstone
expect_equal(as.vector(e.rel[2]), 1.000, tolerance = 0.001)
expect_equal(as.vector(e.abs[2]), 31, tolerance = 0.001)
# sobrante
expect_equal(as.vector(e.rel[3]), 28 / 51, tolerance=0.001)
expect_equal(as.vector(e.abs[3]), 28 , tolerance=0.001)
})
test_that("expected errors", {
# bad horizon name
expect_error(evalMissingData(d, vars = c('clay', 'frags', 'ph'), name = 'namae'))
# bad var spec
expect_error(evalMissingData(d, vars = c('clay', 'frags', 'a'), name = 'name'))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.