@@ -71,62 +71,72 @@ calc_ht_metrics <- function(tree_list, digits = 1) {
7171 }
7272
7373 tree_ht <- pmin(trees_in $ HT , trees_in $ ACTUALHT , na.rm = TRUE )
74- if (any(is.na(tree_ht )))
75- warning(" one or more tree heights are missing" , call. = FALSE )
74+ if (any(is.na(tree_ht ))) {
75+ warning(" one or more tree heights are missing, NAs returned" ,
76+ call. = FALSE )
77+ }
7678
7779 sapling_ht <- pmin(saplings_in $ HT , saplings_in $ ACTUALHT , na.rm = TRUE )
78- if (any(is.na(sapling_ht )))
79- warning(" one or more sapling heights are missing" , call. = FALSE )
80+ if (any(is.na(sapling_ht ))) {
81+ warning(" one or more sapling heights are missing, NAs returned" ,
82+ call. = FALSE )
83+ }
8084
8185 ht_metrics <- vector(mode = " list" , length = 10 )
82- ht_metrics [1 : length(ht_metrics )] <- 0 # by definition
86+ ht_metrics [seq_along(ht_metrics )] <- 0 # by definition
87+
8388 names(ht_metrics ) <- c(" numTrees" , " meanTreeHt" , " meanTreeHtBAW" ,
8489 " meanTreeHtDom" , " meanTreeHtDomBAW" , " maxTreeHt" ,
8590 " predomTreeHt" , " numSaplings" , " meanSapHt" ,
8691 " maxSapHt" )
8792
8893 ht_metrics $ numTrees <- nrow(trees_in )
8994 if (nrow(trees_in ) > 0 ) {
90- basal_area <- pi * (trees_in $ DIA / 2 )^ 2
9195 ht_metrics $ meanTreeHt <-
92- round(mean(tree_ht , na.rm = TRUE ), digits )
96+ round(mean(tree_ht ), digits )
97+
98+ basal_area <- pi * (trees_in $ DIA / 2 )^ 2
9399
94100 ht_metrics $ meanTreeHtBAW <-
95- round(stats :: weighted.mean(tree_ht , basal_area , na.rm = TRUE ),
96- digits )
101+ round(stats :: weighted.mean(tree_ht , basal_area ), digits )
97102
98103 tree_ht_doms <- tree_ht [trees_in $ CCLCD %in% c(1 , 2 , 3 )]
99104 basal_area_doms <- basal_area [trees_in $ CCLCD %in% c(1 , 2 , 3 )]
105+
100106 ht_metrics $ meanTreeHtDom <-
101- round(mean(tree_ht_doms , na.rm = TRUE ), digits )
107+ round(mean(tree_ht_doms ), digits )
102108
103109 ht_metrics $ meanTreeHtDomBAW <-
104- round(stats :: weighted.mean(tree_ht_doms , basal_area_doms ,
105- na.rm = TRUE ),
110+ round(stats :: weighted.mean(tree_ht_doms , basal_area_doms ),
106111 digits = digits )
107112
108- ht_metrics $ maxTreeHt <- max(tree_ht , na.rm = TRUE )
109-
110- tree_ht_tpa <-
111- data.frame (tree_ht , trees_in $ TPA_UNADJ , check.names = FALSE )
112- tree_ht_tpa <- tree_ht_tpa [order(tree_ht , decreasing = TRUE ), ]
113- tpa <- sum_ht <- n <- 0
114- for (i in seq_len(nrow(tree_ht_tpa ))) {
115- sum_ht <- sum_ht + tree_ht_tpa [i , 1 ]
116- tpa <- tpa + tree_ht_tpa [i , 2 ]
117- n <- n + 1
118- if (tpa > 16 )
119- break
113+ ht_metrics $ maxTreeHt <- max(tree_ht )
114+
115+ if (any(is.na(tree_ht )) || any(is.na(trees_in $ TPA_UNADJ ))) {
116+ ht_metrics $ predomTreeHt <- NA_real_
117+ } else {
118+ tree_ht_tpa <-
119+ data.frame (tree_ht , trees_in $ TPA_UNADJ , check.names = FALSE )
120+
121+ tree_ht_tpa <- tree_ht_tpa [order(tree_ht , decreasing = TRUE ), ]
122+ tpa <- sum_ht <- n <- 0
123+ for (i in seq_len(nrow(tree_ht_tpa ))) {
124+ sum_ht <- sum_ht + tree_ht_tpa [i , 1 ]
125+ tpa <- tpa + tree_ht_tpa [i , 2 ]
126+ n <- n + 1
127+ if (tpa > 16 )
128+ break
129+ }
130+ ht_metrics $ predomTreeHt <- round(sum_ht / n , digits )
120131 }
121- ht_metrics $ predomTreeHt <- round(sum_ht / n , digits )
122132 }
123133
124134 ht_metrics $ numSaplings <- nrow(saplings_in )
125135 if (nrow(saplings_in ) > 0 ) {
126136 ht_metrics $ meanSapHt <-
127- round(mean(sapling_ht , na.rm = TRUE ), digits )
137+ round(mean(sapling_ht ), digits )
128138
129- ht_metrics $ maxSapHt <- max(sapling_ht , na.rm = TRUE )
139+ ht_metrics $ maxSapHt <- max(sapling_ht )
130140 }
131141
132142 return (ht_metrics )
0 commit comments