context("collapseHz()")
test_that("collapseHz works", {
data("jacobs2000", package = "aqp")
.BOTTOM <- NULL
# use existing generalized horizon labels
new_labels <- c("A", "E", "Bt", "Bh", "C")
patterns <- c("A", "E", "B.*t", "B.*h", "C")
# calculate a new SPC with genhz column based on patterns
jacobs2000_gen <- generalizeHz(jacobs2000, new = new_labels, pattern = patterns)
# create a missing value
jacobs2000_gen$clay[19] <- NA
# collapse that SPC based on genhz
i <- collapseHz(jacobs2000_gen, hzdesgn = "genhz")
expect_equal(length(jacobs2000), length(i))
expect_equal(nrow(i), 26)
expect_equal(i[7, , .BOTTOM], c(15, 41, 61, 132, 140, 152))
# collapses adjacent horizons with same label
i <- collapseHz(jacobs2000_gen, by = "genhz")
ii <- collapseHz(jacobs2000_gen, by = "genhz", na.rm = TRUE)
# no effect, horizon designations are unique within profiles
j <- collapseHz(jacobs2000_gen, by = "name")
expect_equal(nrow(j), 46)
expect_equal(j[7, , .BOTTOM], jacobs2000[7, , .BOTTOM])
# if using `by` argument, all values must not be NA
expect_error(collapseHz(jacobs2000_gen, by = "matrix_color_munsell"),
"Missing values are not allowed")
# `by` column must also be a horizon-level variable
expect_error(collapseHz(jacobs2000, by = "genhz"), "not a horizon-level variable")
# matches input number of profiles
expect_equal(length(jacobs2000), length(i))
# horizons have been collapsed
expect_equal(nrow(i), 26)
# weighted mean (no NA values) works as expected (clay=47.15)
expect_equal(i$clay[4],
weighted.mean(jacobs2000_gen$clay[6:7], (jacobs2000_gen$bottom - jacobs2000_gen$top)[6:7]))
# weighted mean (contains NA values, na.rm=FALSE) (clay is NA)
expect_true(is.na(i$clay[11]))
# weighted mean (contains NA values, na.rm=TRUE, clay=18.72414)
expect_equal(ii$clay[11],
weighted.mean(jacobs2000_gen$clay[17:20], (jacobs2000_gen$bottom - jacobs2000_gen$top)[17:20], na.rm = TRUE))
# dominant condition (NA values retained)
expect_true(is.na(i$depletion_munsell[13]))
# dominant condition (NA values removed)
expect_equal(ii$depletion_munsell[13], "10YR 8/2")
plot(jacobs2000_gen, color = "concentration_pct")
expect_equal(i[7, , .BOTTOM], c(15, 41, 61, 132, 140, 152))
expect_true(is.numeric(i$clay))
expect_true(is.numeric(j$clay))
# "works" on empty SPC ()
expect_equal(nrow(collapseHz(jacobs2000_gen[0,], by = "genhz")), 0)
# works on SPC with filled profile (1 horizon with NA depths)
all_na <- subsetHz(jacobs2000_gen[1,], TRUE)
all_na$top <- NA_real_
all_na$bottom <- NA_real_
expect_warning(na_nonna <- c(all_na, jacobs2000_gen[2:5,]))
expect_warning(f <- collapseHz(all_na, by = "genhz"), "contain NA")
na_nonna$top[2] <- 19
expect_warning(n <- collapseHz(na_nonna, by = "genhz"), "bottom depths are shallower than top")
expect_equal(nrow(n), 14)
a_pattern <- c(`A` = "^A",
`E` = "E",
`Bt` = "[ABC]+t",
`C` = "^C",
`foo` = "bar")
x <- collapseHz(jacobs2000, a_pattern)
expect_equal(length(jacobs2000), length(x))
expect_equal(nrow(x), 29)
expect_true(is.numeric(x$clay))
m <- collapseHz(jacobs2000,
pattern = a_pattern,
AGGFUN = list(
matrix_color_munsell = function(x, top, bottom) {
thk <- bottom - top
if (length(x) > 1) {
xord <- order(thk, decreasing = TRUE)
data.frame(matrix_color_munsell = paste0(x, collapse = ";"),
n_matrix_color = length(x))
} else {
data.frame(matrix_color_munsell = x,
n_matrix_color = length(x))
}
}
)
)
profile_id(m) <- paste0(profile_id(m), "_collapse_custom")
expect_true(all(c("matrix_color_munsell", "matrix_color_munsell.n_matrix_color") %in% names(m)))
expect_equal(nrow(m), 29)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.