@@ -352,9 +352,12 @@ descr.default <- function(x,
352352 output <- as.data.frame(t(results [ ,- 1 ]))
353353 colnames(output ) <- results $ stat
354354 } else {
355- output <- xx %> %
356- summarise_all(.funs = summar_funs , na.rm = na.rm ) %> %
357- as.data.frame
355+ # Suppress warnings for groups having 0 valid values
356+ suppressWarnings({
357+ output <- xx %> %
358+ summarise_all(.funs = summar_funs , na.rm = na.rm ) %> %
359+ as.data.frame
360+ })
358361 rownames(output ) <- parse_info $ var_name %|| % var_names
359362 }
360363
@@ -371,12 +374,14 @@ descr.default <- function(x,
371374 }
372375
373376 if (" pct.valid" %in% stats ) {
374- output $ pct.valid <- output $ n.valid * 100 / nrow(xx )
377+ output $ pct.valid <- output $ n.valid * 100 / nrow(xx )
375378 }
376379
377380 # Apply corrections where n.valid = 0
378381 zerows <- which(output $ n.valid == 0 )
379- output [zerows , setdiff(stats , " n.valid" )] <- NA
382+ if (length(zerows )) {
383+ warning(" no non-missing arguments to numerical functions" )
384+ }
380385
381386 } else {
382387
@@ -464,28 +469,33 @@ descr.default <- function(x,
464469 }
465470
466471 # Calculate and insert stats into output dataframe
467- output [i , ] <-
468- c(ifelse(" mean" %in% stats , variable.mean , NA ),
469- ifelse(" sd" %in% stats , variable.sd , NA ),
470- ifelse(" min" %in% stats , min(variable , na.rm = na.rm ), NA ),
471- ifelse(" med" %in% stats , weightedMedian(variable , weights_tmp ,
472- refine = TRUE ,
473- na.rm = na.rm ), NA ),
474- ifelse(" max" %in% stats , max(variable , na.rm = na.rm ), NA ),
475- ifelse(" mad" %in% stats , weightedMad(variable , weights_tmp ,
476- refine = TRUE ,
477- na.rm = na.rm ), NA ),
478- ifelse(" cv" %in% stats , variable.sd / variable.mean , NA ),
479- ifelse(" n.valid" %in% stats , n_valid , NA ),
480- ifelse(" n" %in% stats , n , NA ),
481- ifelse(" pct.valid" %in% stats , p_valid * 100 , NA ))
472+ # (suppress repeated warnings when no non-missing data)
473+ suppressWarnings({
474+ output [i , ] <-
475+ c(ifelse(" mean" %in% stats , variable.mean , NA ),
476+ ifelse(" sd" %in% stats , variable.sd , NA ),
477+ ifelse(" min" %in% stats , min(variable , na.rm = na.rm ), NA ),
478+ ifelse(" med" %in% stats , weightedMedian(variable , weights_tmp ,
479+ refine = TRUE ,
480+ na.rm = na.rm ), NA ),
481+ ifelse(" max" %in% stats , max(variable , na.rm = na.rm ), NA ),
482+ ifelse(" mad" %in% stats , weightedMad(variable , weights_tmp ,
483+ refine = TRUE ,
484+ na.rm = na.rm ), NA ),
485+ ifelse(" cv" %in% stats , variable.sd / variable.mean , NA ),
486+ ifelse(" n.valid" %in% stats , n_valid , NA ),
487+ ifelse(" n" %in% stats , n , NA ),
488+ ifelse(" pct.valid" %in% stats , p_valid * 100 , NA ))
489+ })
482490 }
483491
484492 rownames(output ) <- var_names
485493
486494 # Apply corrections where n.valid = 0
487495 zerows <- which(output $ n.valid == 0 )
488- output [zerows , setdiff(stats , " n.valid" )] <- NA
496+ if (length(zerows )) {
497+ warning(" no non-missing arguments to numerical functions" )
498+ }
489499 }
490500
491501 # Prepare output data -------------------------------------------------------
@@ -594,8 +604,11 @@ descr.default <- function(x,
594604
595605 attr(output , " lang" ) <- st_options(" lang" )
596606
597- if (! is.null(ignored ))
598- attr(output , " ignored" ) <- ignored
607+ if (! is.null(ignored )) {
608+ if (length(ignored <- setdiff(ignored , data_info $ by_var ))) {
609+ attr(output , " ignored" ) <- ignored
610+ }
611+ }
599612
600613 return (output )
601614}
0 commit comments