Skip to content

Commit af09527

Browse files
committed
calc_ht_metrics(): add numTrees and numSaplings in the output
1 parent 10c400a commit af09527

3 files changed

Lines changed: 23 additions & 10 deletions

File tree

R/calc_ht_metrics.R

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#' @details
77
#' The following plot-level height metrics are returned in a named list with
88
#' elements:
9+
#' * `numTrees`: number of live trees `>= 5.0` in. (`12.7` cm) diameter
910
#' * `meanTreeHt`: mean height of trees `>= 5.0` in. (`12.7` cm) diameter
1011
#' * `meanTreeHtBAW`: basal-area weighted mean height of trees `>= 5.0` in.
1112
#' (`12.7` cm) diameter
@@ -17,8 +18,9 @@
1718
#' * `predomTreeHt`: predominant tree height, as the mean height of the tallest
1819
#' trees `>= 5.0` in. (`12.7` cm) diameter comprising up to `16` trees per
1920
#' acre (`39.5` trees per hectare)
20-
#' * `meanSapHt`: mean height of saplings (trees `>= 1.0` in. but `< 5.0` in.
21+
#' * `numSaplings`: number of live saplings (trees `>= 1.0` in. but `< 5.0` in.
2122
#' diameter, i.e., `>= 2.54` cm but `< 12.7` cm)
23+
#' * `meanSapHt`: mean height of saplings
2224
#' * `maxSapHt`: height of the tallest sapling
2325
#'
2426
#' For the purpose of height calculations, canopy dominant/co-dominant include
@@ -42,6 +44,8 @@
4244
#' @export
4345
calc_ht_metrics <- function(tree_list, digits = 1) {
4446

47+
# TODO: support input in SI units
48+
4549
if (missing(tree_list) || is.null(tree_list))
4650
stop("'tree_list' is required", call. = FALSE)
4751

@@ -73,12 +77,14 @@ calc_ht_metrics <- function(tree_list, digits = 1) {
7377
if (any(is.na(sapling_ht)))
7478
warning("one or more sapling heights are missing", call. = FALSE)
7579

76-
ht_metrics <- vector(mode = "list", length = 8)
80+
ht_metrics <- vector(mode = "list", length = 10)
7781
ht_metrics[1:length(ht_metrics)] <- 0 # by definition
78-
names(ht_metrics) <- c("meanTreeHt", "meanTreeHtBAW", "meanTreeHtDom",
79-
"meanTreeHtDomBAW", "maxTreeHt", "predomTreeHt",
80-
"meanSapHt", "maxSapHt")
82+
names(ht_metrics) <- c("numTrees", "meanTreeHt", "meanTreeHtBAW",
83+
"meanTreeHtDom", "meanTreeHtDomBAW", "maxTreeHt",
84+
"predomTreeHt", "numSaplings", "meanSapHt",
85+
"maxSapHt")
8186

87+
ht_metrics$numTrees <- nrow(trees_in)
8288
if (nrow(trees_in) > 0) {
8389
basal_area <- pi * (trees_in$DIA / 2)^2
8490
ht_metrics$meanTreeHt <-
@@ -114,6 +120,7 @@ calc_ht_metrics <- function(tree_list, digits = 1) {
114120
ht_metrics$predomTreeHt <- round(sum_ht / n, digits)
115121
}
116122

123+
ht_metrics$numSaplings <- nrow(saplings_in)
117124
if (nrow(saplings_in) > 0) {
118125
ht_metrics$meanSapHt <-
119126
round(mean(sapling_ht, na.rm = TRUE), digits)

man/calc_ht_metrics.Rd

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/testthat/test-calc_ht_metrics.R

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
test_that("calc_ht_metrics works", {
2-
expected <- vector(mode = "list", length = 8)
3-
names(expected) <- c("meanTreeHt", "meanTreeHtBAW", "meanTreeHtDom",
4-
"meanTreeHtDomBAW", "maxTreeHt", "predomTreeHt",
5-
"meanSapHt", "maxSapHt")
2+
expected <- vector(mode = "list", length = 10)
3+
names(expected) <- c("numTrees", "meanTreeHt", "meanTreeHtBAW",
4+
"meanTreeHtDom", "meanTreeHtDomBAW", "maxTreeHt",
5+
"predomTreeHt", "numSaplings", "meanSapHt",
6+
"maxSapHt")
7+
8+
expected$numTrees <- 89
69
expected$meanTreeHt <- 45
710
expected$meanTreeHtBAW <- 45.4
811
expected$meanTreeHtDom <- 45
912
expected$meanTreeHtDomBAW <- 45.4
1013
expected$maxTreeHt <- 51
1114
expected$predomTreeHt <- 50.3
15+
expected$numSaplings <- 2
1216
expected$meanSapHt <- 33.5
1317
expected$maxSapHt <- 42
1418
expect_equal(calc_ht_metrics(plantation), expected, tolerance = 0.1)

0 commit comments

Comments
 (0)