base_path <- file.path(getwd(), "tests/testthat") data_dir <- base_path base_path <- tempdir() data_dir <- "." dev <- FALSE datm <- read.table(header = TRUE, text = ' LastName Age PresentScore TasteScore Flavor Layers Orlando 27 93 80 Vanilla 1 Ramey 32 84 72 Rum 2 Goldston 46 68 75 Vanilla 1 Roe 38 79 73 Vanilla 2 Larsen 23 77 84 Chocolate 3 Davis 51 86 91 Spice 3 Strickland 19 82 79 Chocolate 1 Nguyen 57 77 84 Vanilla 3 Hildenbrand 33 81 83 Chocolate 1 Byron 62 72 87 Vanilla 2 Sanders 26 56 79 Chocolate 1 Jaeger 43 66 74 NA 1 Davis 28 69 75 Chocolate 2 Conrad 69 85 94 Vanilla 1 Walters 55 67 72 Chocolate 2 Rossburger 28 78 81 Spice 2 Matthew 42 81 92 Chocolate 2 Becker 36 62 83 Spice 2 Anderson 27 87 85 Chocolate 1 Merritt 62 73 84 Chocolate 1 ') options("logr.output" = FALSE) options("procs.print" = FALSE) test_that("means0: get_summaries works as expected for 1 variable.", { res <- get_summaries(datm, var = "PresentScore", stats = c("n", "mean", "min", "max", "range", "median"), missing = FALSE) res expect_equal(res[1, "N"], 20) expect_equal(res[1, "MEAN"], 76.15) expect_equal(res[1, "MIN"], 56) expect_equal(res[1, "MAX"], 93) expect_equal(res[1, "RANGE"], 37) expect_equal(res[1, "MEDIAN"], 77.5) }) test_that("means1: get_summaries works as expected for two variables.", { res <- get_summaries(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "mean", "min", "max", "range", "median")) res expect_equal(res[2, "N"], 20) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "MIN"], 72) expect_equal(res[2, "MAX"], 94) expect_equal(res[2, "RANGE"], 22) expect_equal(res[2, "MEDIAN"], 82) }) test_that("means2: gen_report_means works as expected with two variables.", { res <- gen_report_means(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "mean", "max", "min", "range", "median", "std"), titles = "My first title for Means") res expect_equal(is.data.frame(res), TRUE) expect_equal(nrow(res), 2) expect_equal(ncol(res), 8) expect_equal(res[2, "N"], 20) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "MIN"], 72) expect_equal(res[2, "MAX"], 94) expect_equal(res[2, "RANGE"], 22) expect_equal(res[2, "MEDIAN"], 82) }) # test_that("means3: check more stats options and piped parameter.", { # # res <- proc_means(datm, var = c("PresentScore", "TasteScore"), # stats = c("sum", "nobs", "nmiss", "var", "css", "cv"), # titles = "My first title for Means", # piped = TRUE) # # res # # expect_equal("data.frame" %in% class(res), TRUE) # expect_equal(ncol(res), 7) # # expect_equal(res[2, "Sum"], 1627) # expect_equal(res[2, "Nobs"], 20) # expect_equal(res[2, "NMISS"], 0) # expect_equal(res[2, "CSS"], 830.55) # expect_equal(res[2, "CV"] > 8, TRUE) # # }) test_that("means4: gen_report_means with two variables and by group.", { res <- gen_report_means(datm, var = c("PresentScore", "TasteScore"), by = "Layers", stats = c("n", "mean", "max", "min", "range", "median", "std"), titles = "My first title for Means") res expect_equal(length(res), 3) expect_equal(nrow(res[[1]]), 2) expect_equal(ncol(res[[1]]), 8) }) test_that("means5: gen_report_means with two variables and two by groups.", { res <- gen_report_means(datm, var = c("PresentScore", "TasteScore"), by = c("Flavor", "Layers"), stats = c("n", "mean", "max", "min", "range", "median", "std"), titles = "My first title for Means") res expect_equal(length(res), 9) expect_equal(nrow(res[[1]]), 2) expect_equal(ncol(res[[1]]), 8) }) test_that("means6: get_summaries works as expected for two variables with v().", { library(common) res <- get_summaries(datm, var = v(PresentScore, TasteScore), stats = v(n, mean, min, max, range, median)) res expect_equal(res[2, "N"], 20) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "MIN"], 72) expect_equal(res[2, "MAX"], 94) expect_equal(res[2, "RANGE"], 22) expect_equal(res[2, "MEDIAN"], 82) }) test_that("means7: gen_report_means with single parameter values.", { res <- gen_report_means(datm, var = "PresentScore", stats = "mean", titles = "My first title for Means") res expect_equal(is.data.frame(res), TRUE) expect_equal(nrow(res), 1) expect_equal(ncol(res), 2) }) test_that("means8: proc_means with unquoted parameter values.", { res <- proc_means(datm, var = PresentScore, stats = mean, titles = "My first title for Means" ) res expect_equal(is.null(res), FALSE) expect_equal(nrow(res), 1) expect_equal(ncol(res), 4) }) test_that("means9: parameter checks work.", { expect_error(proc_means(datm, var = "Fork", stats = "mean")) expect_error(proc_means(datm, var = "PresentScore", stats = "Fork")) expect_error(proc_means(datm, by = "Fork", var = "PresentScore", stats = "mean")) datm2 <- datm[ 0, ] expect_error(proc_means(datm2, var = "PresentScore")) }) test_that("means10: proc_means with variable parameter values.", { var1 <- "PresentScore" var2 <- c("n", "mean", "min", "max") res <- proc_means(datm, var = var1, stats = var2, titles = "My first title for Means") res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(nrow(res), 1) expect_equal(ncol(res), 7) }) test_that("means11: proc_means with variable parameter values and v().", { var1 <- "PresentScore" var2 <- v(n, mean, min, max, median) res <- proc_means(datm, var = var1, stats = var2, titles = "My first title for Means") res expect_equal(nrow(res), 1) expect_equal(ncol(res), 8) }) test_that("means12: proc_means in function works.", { var1 <- c("PresentScore", "TasteScore") var2 <- v(n, mean, min, max, median) myfunc <- function(myvar1, myvar2) { myres <- proc_means(datm, var = var1, stats = var2, titles = "My first title for Means", output = long) return(myres) } res <- myfunc(var1, var2) expect_equal(nrow(res), 5) expect_equal(ncol(res), 5) }) test_that("means13: check more stats options", { res <- proc_means(datm, var = v(PresentScore, TasteScore), stats = v(nmiss, median, mode, clm, stderr), options = v(nonobs, notype), titles = "My first title for Means") res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 7) expect_equal(res[2, "NMISS"], 0) expect_equal(res[2, "MEDIAN"], 82) expect_equal(res[2, "MODE"], 84) expect_equal(res[2, "UCLM"], 84.44432) expect_equal(res[2, "LCLM"], 78.25568) expect_equal(res[2, "STDERR"], 1.47839707) }) test_that("means14: check missing value works.", { datm2 <- datm datm2[5, "PresentScore"] <- NA res <- proc_means(datm2, var = c("PresentScore", "TasteScore"), stats = c("n", "nmiss", "mean", "median", "mode", "clm", "std"), titles = "My first title for Means", options = v(notype, nonobs)) res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 9) expect_equal(res[1, "NMISS"], 1) expect_equal(res[1, "MEAN"], 76.105263158) expect_equal(res[1, "MEDIAN"], 78) expect_equal(res[1, "MODE"], 81) expect_equal(res[1, "UCLM"], 80.747505) expect_equal(res[1, "LCLM"], 71.463022) expect_equal(res[1, "STD"], 9.6315150351) expect_equal(res[2, "NMISS"], 0) expect_equal(res[2, "MEDIAN"], 82) expect_equal(res[2, "MODE"], 84) expect_equal(res[2, "UCLM"], 84.44432) expect_equal(res[2, "LCLM"], 78.25568) expect_equal(res[2, "STD"], 6.6115926897) }) # These match SAS. test_that("means15: check missing parameter works.", { res <- proc_means(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "p1", "p5", "p10", "p20", "p25", "p30", "p40", "p50", "p60", "p70", "p75", "p80", "p90", "p95", "p99", "q1", "q3", "qrange"), titles = "My first title for Means") res expect_equal(res[1, "N"], 20) expect_equal(res[1, "P1"], 56) expect_equal(res[1, "P5"], 59) expect_equal(res[1, "P10"], 64) expect_equal(res[1, "P20"], 67.5) expect_equal(res[1, "P25"], 68.5) expect_equal(res[1, "P30"], 70.5) expect_equal(res[1, "P40"], 75) expect_equal(res[1, "P50"], 77.5) expect_equal(res[1, "P60"], 80) expect_equal(res[1, "P70"], 81.5) expect_equal(res[1, "P75"], 83) expect_equal(res[1, "P80"], 84.5) expect_equal(res[1, "P90"], 86.5) expect_equal(res[1, "P95"], 90) expect_equal(res[1, "P99"], 93) expect_equal(res[1, "Q1"], 68.5) expect_equal(res[1, "Q3"], 83) expect_equal(res[1, "QRANGE"], 14.5) expect_equal(res[2, "N"], 20) expect_equal(res[2, "P1"], 72) expect_equal(res[2, "P5"], 72) expect_equal(res[2, "P10"], 72.5) expect_equal(res[2, "P20"], 74.5) expect_equal(res[2, "P25"], 75) expect_equal(res[2, "P30"], 77) expect_equal(res[2, "P40"], 79.5) expect_equal(res[2, "P50"], 82) expect_equal(res[2, "P60"], 83.5) expect_equal(res[2, "P70"], 84) expect_equal(res[2, "P75"], 84.5) expect_equal(res[2, "P80"], 86) expect_equal(res[2, "P90"], 91.5) expect_equal(res[2, "P95"], 93) expect_equal(res[2, "P99"], 94) expect_equal(res[2, "Q1"], 75) expect_equal(res[2, "Q3"], 84.5) expect_equal(res[2, "QRANGE"], 9.5) }) test_that("means16: default vars works.", { res <- proc_means(datm, output = long) res expect_equal(nrow(res), 5) expect_equal(ncol(res), 7) }) test_that("means17: get_summaries shape long works as expected.", { res <- get_summaries(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "mean", "min", "max", "range", "median"), shape = "long") res expect_equal(res[1, "PresentScore"], 20) expect_equal(res[2, "PresentScore"], 76.15) expect_equal(res[3, "PresentScore"], 56) expect_equal(res[4, "PresentScore"], 93) expect_equal(res[5, "PresentScore"], 37) expect_equal(res[6, "PresentScore"], 77.5) }) test_that("means18: get_output long works.", { res <- get_output(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "mean", "min", "max", "range", "median"), shape = "long", type = 0, freq = TRUE, by = c(by1 = "By1"), class = c(cls1 = "Class1", cls2 = "Class2")) res expect_equal(nrow(res), 6) expect_equal(res$BY[1], "By1") expect_equal(res$CLASS1[1], "Class1") expect_equal(res$CLASS2[1], "Class2") expect_equal(res$TYPE[1], 0) expect_equal(res$FREQ[1], 20) }) test_that("means19: get_output wide works.", { res <- get_output(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "mean", "min", "max", "range", "median"), shape = "wide", type = 0, freq = TRUE, by = c(by1 = "By1"), class = c(cls1 = "Class1", cls2 = "Class2")) res expect_equal(nrow(res), 2) expect_equal(res$BY[1], "By1") expect_equal(res$CLASS1[1], "Class1") expect_equal(res$CLASS2[1], "Class2") expect_equal(res$TYPE[1], 0) expect_equal(res$FREQ[1], 20) }) test_that("means20: get_output wide no by or class works.", { res <- get_output(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "mean", "min", "max", "range", "median"), shape = "wide", type = 0, freq = TRUE) res expect_equal(nrow(res), 2) expect_equal(res$TYPE[1], 0) expect_equal(res$FREQ[1], 20) }) test_that("means21: get_output wide no extra works.", { res <- get_output(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "mean", "min", "max", "range", "median"), shape = "wide") res expect_equal(nrow(res), 2) expect_equal("TYPE" %in% names(res), FALSE) expect_equal("FREQ" %in% names(res), FALSE) }) test_that("means22: gen_output_means works.", { res <- gen_output_means(datm, var = c("PresentScore", "TasteScore"), output = list(out1 = out_spec(stats = c("n", "mean", "min", "max"), shape = "long"), out2 = out_spec(stats = c("n", "mean", "std"), shape = "long"))) res expect_equal(length(res), 2) res1 <- res[[1]] labels(res1) <- NULL expect_equal(res1[["STAT"]], c("N", "MEAN", "MIN", "MAX")) res2 <- res[[2]] labels(res2) <- NULL expect_equal(res2$STAT, c("N", "MEAN", "STD")) }) test_that("means23: get_class works.", { res <- get_class_report(datm, var = c("PresentScore", "TasteScore"), class = "Layers", outp = out_spec(stats = c("n", "mean", "min", "max"), shape = "wide")) res expect_equal(nrow(res), 6) res <- get_class_output(datm, var = c("PresentScore", "TasteScore"), class = "Layers", outp = out_spec(stats = c("n", "mean", "min", "max"), shape = "wide")) res expect_equal(nrow(res), 6) }) test_that("means24: gen_output_means works.", { res <- gen_output_means(datm, var = c("PresentScore", "TasteScore"), class = "Layers", output = list(out1 = out_spec(stats = c("n", "mean", "min", "max"), shape = "long"), out2 = out_spec(stats = c("n", "mean", "std"), shape = "long"))) res expect_equal(length(res), 2) res1 <- res[[1]] expect_equal(res1$STAT[1:4], c("N", "MEAN", "MIN", "MAX")) res2 <- res[[2]] expect_equal(res2$STAT[1:3], c("N", "MEAN", "STD")) }) # Matches SAS test_that("means25: class parameter works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "min", "max", "mean", "std") res <- proc_means(datm, var = var1, stats = var2, class = Layers, titles = "My first title for Means", output = long) res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(nrow(res), 20) expect_equal(ncol(res), 7) expect_equal(res[1, 5], 20) expect_equal(res[2, 5], 19) expect_equal(res[3, 5], 69) expect_equal(res[4, 5], 40.2) expect_equal(res[5, 5], 14.827428354) expect_equal(res[6, 6], 9) expect_equal(res[7, 6], 56) expect_equal(res[8, 6], 93) expect_equal(res[9, 6], 76.777777778) expect_equal(res[10, 6], 11.829811683) expect_equal(res[11, 7], 8) expect_equal(res[12, 7], 72) expect_equal(res[13, 7], 92) expect_equal(res[14, 7], 79.375) expect_equal(res[15, 7], 7.5769858312) expect_equal(res[16, 7], 3) expect_equal(res[17, 7], 84) expect_equal(res[18, 7], 91) expect_equal(res[19, 7], 86.333333333) expect_equal(res[20, 7], 4.0414518843) }) test_that("means26: get_output with by works", { var2 <- c("n", "min", "max", "mean", "std") res <- get_output(datm, var = "PresentScore", stats = var2, by = c("Layers" = 1), shape = "long") res expect_equal(nrow(res), 5) }) test_that("means27: by parameter works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") res <- proc_means(datm, var = var1, stats = var2, by = "Layers", # class = "Flavor", titles = "My first title for Means", output = long) res expect_equal(nrow(res), 15) expect_equal(ncol(res), 7) }) # Need to work on this test_that("means28: by with class works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") res <- proc_means(datm, var = var1, stats = var2, by = "Layers", class = "Flavor", titles = "My first title for Means", output = long) res expect_equal(nrow(res), 60) expect_equal(ncol(res), 8) }) test_that("means29: 2 class vars works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") res <- proc_means(datm, var = var1, stats = var2, #by = "Layers", class = c("Layers", "Flavor"), titles = "My first title for Means", output = long) res expect_equal(nrow(res), 85) expect_equal(ncol(res), 8) }) test_that("means30: by and 2 class vars works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") datm2 <- datm datm2$Group <- c(rep("A", 10), rep("B", 10)) res <- proc_means(datm2, var = var1, stats = var2, by = "Group", class = c("Flavor", "Layers"), titles = "My first title for Means", output = long) res expect_equal(nrow(res), 125) expect_equal(ncol(res), 9) expect_equal(all(c("BY") %in% names(res)), TRUE) }) # ? test_that("means31: Outputs work as expected.", { options("procs.print" = FALSE) res <- proc_means(datm, output = none) res expect_equal(is.null(res), TRUE) res2 <- proc_means(datm, output = out) expect_equal(nrow(res2), 4) expect_equal(ncol(res2), 8) options("procs.print" = NULL) }) test_that("means32: get_class works with empty data frame.", { dftmp <- datm[datm$Layers == 42, ] res <- get_class_report(dftmp, var = c("PresentScore", "TasteScore"), class = "Layers", outp = out_spec(stats = c("n", "mean", "min", "max"), shape = "wide")) res expect_equal(nrow(res), 2) res <- get_class_output(dftmp, var = c("PresentScore", "TasteScore"), class = "Layers", outp = out_spec(stats = c("n", "mean", "min", "max"), shape = "wide")) res expect_equal(nrow(res), 2) }) test_that("means33: 2 by and 1 class vars works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") datm2 <- datm datm2$Group <- c(rep("A", 10), rep("B", 10)) res <- proc_means(datm2, var = var1, stats = var2, by = c("Group", "Layers"), class = "Flavor", titles = "My first title for Means", output = long) res expect_equal(nrow(res), 80) expect_equal(ncol(res), 9) expect_equal(all(c("BY1", "BY2") %in% names(res)), TRUE) }) test_that("means34: Report output works.", { var1 <- c("Age", "PresentScore", "TasteScore") res <- proc_means(datm, by = "Layers", output = report) res expect_equal(length(res), 3) expect_equal(nrow(res[[1]]), 3) expect_equal(ncol(res[[1]]), 6) expect_equal(nrow(res[[2]]), 3) expect_equal(ncol(res[[2]]), 6) expect_equal(nrow(res[[3]]), 3) expect_equal(ncol(res[[3]]), 6) }) test_that("means35: Stacked output works.", { var1 <- c("Age", "PresentScore", "TasteScore") res <- proc_means(datm, by = "Layers", output = stacked) res expect_equal(nrow(res), 45) expect_equal(ncol(res), 6) }) test_that("means36: log_means() works as expected.", { # data, # by = NULL, # class = NULL, # var = NULL, # stats = NULL, # output = NULL, # weight = NULL, # view = TRUE, # titles = NULL, # opts = NULL, # where = NULL, # outcnt = NULL res <- log_means(mtcars, var = c("mpg", "cyl"), stats = c("n", "mean", "median"), weight = "count", titles = c("here is my big long title", "Here is another title"), output = "report", opts = c("nway", vardef = "DF"), where = expression(A == 1), by = "cyl", class="disp", outcnt = 6) res expect_equal(length(res), 12) }) test_that("means37: warning on unknown parameter works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "min", "max", "mean", "std") expect_error(proc_means(datm, var = var1, stats = var2, class = Layers, fork = TRUE, titles = "My first title for Means")) }) test_that("means38: view can be FALSE without error.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "min", "max", "mean", "std") res <- proc_means(datm, var = var1, stats = var2, class = Layers, titles = "My first title for Means", options = noprint) expect_equal(is.null(res), FALSE) }) test_that("means39: check more confidence limit options", { # 2-sided 95% res <- proc_means(datm, var = v(PresentScore, TasteScore), stats = v(mean, clm), options = v(nonobs, notype, alpha = .05), titles = "My first title for Means") res frt <- v(nonobs, notype, alpha = .05) expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 4) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "UCLM"], 84.44432) expect_equal(res[2, "LCLM"], 78.25568) # 2-sided 90% res <- proc_means(datm, var = v(PresentScore, TasteScore), stats = v(mean, clm), options = v(nonobs, notype, alpha = .1), titles = "My first title for Means") res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 4) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "UCLM"], 83.906345) expect_equal(res[2, "LCLM"], 78.793655) # 1-sided 90% uclm res <- proc_means(datm, var = v(PresentScore, TasteScore), stats = v(mean, uclm), options = v(nonobs, notype, alpha = .1), titles = "My first title for Means") res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 3) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "UCLM"], 83.31291) # 1-sided 90% lclm res <- proc_means(datm, var = v(PresentScore, TasteScore), stats = v(mean, lclm), options = v(nonobs, notype, alpha = .1), titles = "My first title for Means") res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 3) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "LCLM"], 79.38709) # 2-sided 90% with individual stat keywords res <- proc_means(datm, var = v(PresentScore, TasteScore), stats = v(mean, lclm, uclm), options = v(nonobs, notype, alpha = .1), titles = "My first title for Means") res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 4) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "UCLM"], 83.906345) expect_equal(res[2, "LCLM"], 78.793655) }) test_that("means40: check maxdec option", { # 2-sided 95% res <- proc_means(datm, var = v(PresentScore, TasteScore), stats = v(mean, clm), options = v(nonobs, notype, maxdec = 2), titles = "My first title for Means") res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 4) expect_equal(res[2, "MEAN"], 81.35) expect_equal(res[2, "UCLM"], 84.44432) expect_equal(res[2, "LCLM"], 78.25568) }) test_that("means41: t and probt work as expected.", { datp <- read.table(header = TRUE, text = ' WBEFORE WAFTER 200 190 175 154 188 176 198 193 197 198 310 240 245 204 202 178') datp$WLOSS <- datp$WAFTER - datp$WBEFORE res <- proc_means(datp, var = WLOSS, stats = v(n, mean, t, prt, probt, df), titles = c("Paired t-test example")) expect_equal(res[1, "N"], 8) expect_equal(res[1, "MEAN"], -22.75) expect_equal(res[1, "T"], -2.7884739) expect_equal(res[1, "PRT"], 0.026967454) expect_equal(res[1, "PROBT"], 0.026967454) expect_equal(res[1, "DF"], 7) }) test_that("means42: default statistics work as expected.", { res <- proc_means(datm, var = v(Age, PresentScore, TasteScore, Layers), titles = c("Test")) expect_equal(names(res), c("TYPE", "FREQ", "VAR", "N", "MEAN", "STD", "MIN", "MAX" )) }) test_that("means43: various statistics work as expected.", { res <- proc_means(datm, var = v(Age, PresentScore, TasteScore, Layers), stats = v(n, mean, uss, vari, sum, nobs, cv, css), titles = c("Test")) expect_equal(res[1, "N"], 20) expect_equal(res[1, "MEAN"], 40.2) expect_equal(res[1, "USS"], 36498) expect_equal(res[1, "VARI"], 219.8526316) expect_equal(res[1, "SUM"], 804) expect_equal(res[1, "CV"], 36.8841501) expect_equal(res[1, "CSS"], 4177.2) }) test_that("means44: skewness and kurtosis work as expected.", { res <- proc_means(datm, var = v(Age, PresentScore, TasteScore, Layers), stats = v(n, mean, skew, kurt), titles = c("Test"), options = c(maxdec = 8)) expect_equal(res[2, "N"], 20) expect_equal(res[2, "MEAN"], 76.15) expect_equal(res[2, "SKEW"], -0.36762986) expect_equal(res[2, "KURT"], -0.30448351) }) test_that("means45: default variables work as expected.", { res <- proc_means(datm, titles = c("Test")) expect_equal(names(res), c("TYPE", "FREQ", "VAR", "N", "MEAN", "STD", "MIN", "MAX" )) expect_equal(as.character(res$VAR), c("Age", "PresentScore", "TasteScore", "Layers")) }) test_that("means46: Multiple class vars match SAS.", { datmr <- read.table(header = TRUE, text = ' LastName Age PresentScore TasteScore Flavor Layers Region Orlando 27 93 80 Vanilla 1 1 Ramey 32 84 72 Rum 2 1 Goldston 46 68 75 Vanilla 1 1 Roe 38 79 73 Vanilla 2 1 Larsen 23 77 84 Chocolate 3 1 Davis 51 86 91 Spice 3 1 Strickland 19 82 79 Chocolate 1 1 Nguyen 57 77 84 Vanilla 3 1 Hildenbrand 33 81 83 Chocolate 1 1 Byron 62 72 87 Vanilla 2 1 Sanders 26 56 79 Chocolate 1 2 Jaeger 43 66 74 NA 1 2 Davis 28 69 75 Chocolate 2 2 Conrad 69 85 94 Vanilla 1 2 Walters 55 67 72 Chocolate 2 2 Rossburger 28 78 81 Spice 2 2 Matthew 42 81 92 Chocolate 2 2 Becker 36 62 83 Spice 2 2 Anderson 27 87 85 Chocolate 1 2 Merritt 62 73 84 Chocolate 1 2 ') res <- proc_means(datmr, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "min", "max", "mean", "std"), output = c("out", "report", "long"), class = c("Region", "Layers"), titles = "My first title for Means", options = c(maxdec = 4)) res expect_equal(nrow(res$out), 55) expect_equal(ncol(res$out), 8) expect_equal(nrow(res$report), 15) expect_equal(ncol(res$report), 8) res <- proc_means(datmr, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "min", "max", "mean", "std"), output = c("out", "report", "long"), class = c("Region", "Layers", "Flavor"), titles = "My first title for Means", options = c( maxdec = 4)) res expect_equal(nrow(res$out), 210) expect_equal(ncol(res$out), 9) expect_equal(nrow(res$report), 33) expect_equal(ncol(res$report), 9) }) test_that("means47: check alternate keywords work.", { res <- proc_means(datm, var = c("PresentScore", "TasteScore"), stats = c("n", "mean", "stddev", "skewness", "kurtosis"), titles = "My first title for Means", options = v(notype, nonobs)) res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 6) expect_equal(res[2, "STD"], 6.6115926897) expect_equal(res[1, "SKEW"], -0.36762986) expect_equal(res[1, "KURT"], -0.30448351) }) test_that("means48: nway option works.", { res <- proc_means(datm, var = c("PresentScore", "TasteScore"), titles = "My first title for Means", class = c("Layers", "Flavor"), options = c("nway")) res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 10) expect_equal(nrow(res), 18) res <- proc_means(datm, var = c("PresentScore", "TasteScore"), titles = "My first title for Means", class = c("Layers", "Flavor"), options = c("nway", "notype")) res expect_equal("data.frame" %in% class(res), TRUE) expect_equal(ncol(res), 9) expect_equal(nrow(res), 18) }) test_that("means49: factors work as expected.", { datmr <- read.table(header = TRUE, text = ' LastName Age PresentScore TasteScore Flavor Layers Region Orlando 27 93 80 Vanilla 1 1 Ramey 32 84 72 Rum 2 1 Goldston 46 68 75 Vanilla 1 1 Roe 38 79 73 Vanilla 2 1 Larsen 23 77 84 Chocolate 3 1 Davis 51 86 91 Spice 3 1 Strickland 19 82 79 Chocolate 1 1 Nguyen 57 77 84 Vanilla 3 1 Hildenbrand 33 81 83 Chocolate 1 1 Byron 62 72 87 Vanilla 2 1 Sanders 26 56 79 Chocolate 1 2 Jaeger 43 66 74 NA 1 2 Davis 28 69 75 Chocolate 2 2 Conrad 69 85 94 Vanilla 1 2 Walters 55 67 72 Chocolate 2 2 Rossburger 28 78 81 Spice 2 2 Matthew 42 81 92 Chocolate 2 2 Becker 36 62 83 Spice 2 2 Anderson 27 87 85 Chocolate 1 2 Merritt 62 73 84 Chocolate 1 2 ') datmr$Flavor <- factor(datmr$Flavor, levels = c("Rum", "Vanilla", "Chocolate", "Spice")) suppressWarnings(attr(datmr[["Layers"]], "levels") <- c("Three", "Two", "One")) class(datmr$Layers) <- "factor" suppressWarnings(attr(datmr[["Region"]], "levels") <- c("South", "North")) class(datmr$Region) <- "factor" res <- proc_means(datmr, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "min", "max", "mean", "std"), output = c("out", "report", "long"), by = "Region", # class = c("Layers", "Flavor"), titles = "My first title for Means", options = c(maxdec = 4)) res expect_equal(nrow(res$out), 10) expect_equal(ncol(res$out), 7) expect_equal(nrow(res$report[[1]]), 3) expect_equal(ncol(res$report[[1]]), 6) res <- proc_means(datmr, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "min", "max", "mean", "std"), output = c("out", "report", "long"), class = c("Region", "Layers", "Flavor"), titles = "My first title for Means", options = c(maxdec = 4)) res expect_equal(nrow(res$out), 210) expect_equal(ncol(res$out), 9) expect_equal(nrow(res$report), 33) expect_equal(ncol(res$report), 9) res <- proc_means(datmr, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "min", "max", "mean", "std"), output = c("out", "report", "long"), by = "Region", class = c("Layers", "Flavor"), titles = "My first title for Means", options = c(maxdec = 4)) res expect_equal(nrow(res$out), 125) expect_equal(ncol(res$out), 9) expect_equal(nrow(res$report[[1]]), 21) expect_equal(ncol(res$report[[1]]), 8) }) test_that("means50: two by as factors work.", { datsp <- datm datsp$Flavor <- factor(datsp$Flavor, levels = c("Vanilla", "Chocolate", "Spice", "Rum")) datsp$Layers <- factor(datsp$Layers, levels = c("3", "2", "1")) res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, by = c("Layers", "Flavor")) res1 expect_equal(nrow(res1), 27) expect_equal(ncol(res1), 10) res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, by = c("Layers"), class = "Flavor") res1 #labels(res1) expect_equal(nrow(res1), 36) expect_equal(ncol(res1), 10) }) test_that("means51: other statistics with by works.", { datsp <- datm datsp$Layers[1] <- 3 res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("kurtosis", "skew", "cv", "clm"), output = out, by = c("Layers"), options = c(maxdec = 8) ) res1 expect_equal(nrow(res1), 9) expect_equal(ncol(res1), 9) expect_equal(res1[1, 5], -0.95194732) expect_equal(res1[1, 6], 0.55802418) expect_equal(res1[1, 7], 43.85482852) expect_equal(res1[1, 8], 25.73043112) expect_equal(res1[1, 9], 55.51956888) # Not enough observations res2 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("cv", "clm"), output = out, by = c("Layers"), class = "Flavor", options = c(maxdec = 8) ) res2 expect_equal(nrow(res2), 36) expect_equal(ncol(res2), 8) expect_equal(res2[7, 6], 28.2842712) expect_equal(res2[7, 7], -88.6213545) expect_equal(res2[7, 8], 203.6213545) }) test_that("means52: factor sort on class works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") datsp <- datm datsp$Flavor <- factor(datsp$Flavor, levels = c("Vanilla", "Chocolate", "Spice", "Rum")) datsp$Layers <- factor(datsp$Layers, levels = c("4", "3", "2", "1")) res <- proc_means(datsp, var = var1, stats = var2, #by = "Layers", class = c("Layers"), titles = "My first title for Means", output = c("out", "report", "long")) res expect_equal(nrow(res$report), 9) expect_equal(ncol(res$report), 7) expect_equal(as.character(unique(res$report$CLASS)), c("3", "2", "1")) expect_equal(nrow(res$out), 20) expect_equal(ncol(res$out), 7) expect_equal(as.character(unique(res$out$CLASS)), c(NA, "3", "2", "1")) }) test_that("means53: factor sort on 2 classes works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") datsp <- datm datsp$Flavor <- factor(datsp$Flavor, levels = c("Vanilla", "Chocolate", "Spice", "Rum")) datsp$Layers <- factor(datsp$Layers, levels = c("4", "3", "2", "1")) res <- proc_means(datsp, var = var1, stats = var2, #by = "Layers", class = c("Layers", "Flavor"), titles = "My first title for Means", output = c("out", "report", "long")) res expect_equal(nrow(res$report), 27) expect_equal(ncol(res$report), 8) expect_equal(as.character(unique(res$report$CLASS1)), c("3", "2", "1")) expect_equal(as.character(unique(res$report$CLASS2)), c("Vanilla", "Chocolate", "Spice", "Rum")) expect_equal(nrow(res$out), 85) expect_equal(ncol(res$out), 8) expect_equal(as.character(unique(res$out$CLASS1)), c(NA, "3", "2", "1")) expect_equal(as.character(unique(res$out$CLASS2)), c(NA, "Vanilla", "Chocolate", "Spice", "Rum")) }) test_that("means54: completetypes on one factor works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") datsp <- datm datsp$Age[[1]] <- NA datsp$Flavor <- factor(datsp$Flavor, levels = c("Vanilla", "Chocolate", "Spice", "Rum", "Butter")) datsp$Layers <- factor(datsp$Layers, levels = c("4", "3", "2", "1")) res <- proc_means(datsp, var = var1, stats = var2, #by = "Layers", class = c("Layers"), titles = "My first title for Means", options = "completetypes", output = c("out", "report")) res res1 <- proc_means(datsp, var = var1, stats = var2, #by = "Layers", class = c("Flavor"), titles = "My first title for Means", options = "completetypes", output = c("out", "report")) res1 expect_equal(nrow(res$out), 15) expect_equal(ncol(res$out), 9) expect_equal("4" %in% res$out$CLASS, TRUE) expect_equal(nrow(res1$out), 18) expect_equal(ncol(res1$out), 9) expect_equal("Butter" %in% res1$out$CLASS, TRUE) expect_equal("4" %in% res$report$CLASS, TRUE) expect_equal("Butter" %in% res1$report$CLASS, TRUE) }) test_that("means55: completetypes option on two factors works.", { var1 <- c("Age", "PresentScore", "TasteScore") var2 <- c("n", "mean", "std", "min", "max") datsp <- datm datsp$Flavor <- factor(datsp$Flavor, levels = c("Vanilla", "Chocolate", "Spice", "Rum", "Butter")) datsp$Layers <- factor(datsp$Layers, levels = c("4", "3", "2", "1")) res2 <- proc_means(datsp, var = var1, stats = var2, #by = "Layers", class = c("Layers", "Flavor"), titles = "My first title for Means", options = "completetypes", output = c("out", "report")) res2 expect_equal(nrow(res2$out), 90) expect_equal(ncol(res2$out), 10) expect_equal("Butter" %in% res2$out$CLASS2, TRUE) expect_equal("4" %in% res2$out$CLASS1, TRUE) expect_equal("Butter" %in% res2$report$CLASS2, TRUE) expect_equal("4" %in% res2$report$CLASS1, TRUE) }) test_that("means56: Ordered factors on class work.", { datsp <- datm datsp$Flavor <- factor(datsp$Flavor, levels = c("Vanilla", "Chocolate", "Spice", "Rum"), ordered = TRUE) datsp$Layers <- factor(datsp$Layers, levels = c("3", "2", "1")) res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, class = c("Flavor"), options = c("notype", "nofreq", "nway")) res1 expect_equal(nrow(res1), 12) expect_equal(ncol(res1), 7) ucls <- unique(res1$CLASS) expect_equal(as.character(ucls), c("Vanilla", "Chocolate", "Spice", "Rum")) }) test_that("means57: Output is tibble when input is a tibble.", { datsp <- tibble::as_tibble(datm) res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, options = c("notype", "nofreq", "nway")) res1 expect_equal("tbl_df" %in% class(res1), TRUE) }) test_that("means58: parameter checks work.", { expect_error(proc_means("bork", var = c("Age"))) expect_error(proc_means(datm[0, ], var = c("Age"))) expect_error(proc_means(datm, var = c("fork"))) }) test_that("means59: vardef option works", { datsp <- datm datsp$Weight <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2) #vardf = df res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, options = v(notype, nofreq, nway, vardef = "df")) #vardf = n res2 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, options = v(notype, nofreq, nway, vardef = "n")) #vardf = wdf res3 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, weight = Weight, options = v(notype, nofreq, nway, vardef = "wdf")) #vardf = weight/wgt res4 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, weight = Weight, options = v(notype, nofreq, nway, vardef = "wgt")) res5 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, weight = Weight, options = v(notype, nofreq, nway, vardef = "weight")) #STD expect_equal(res1$STD[2], 9.3767630) expect_equal(res2$STD[2], 9.1393381) expect_equal(res3$STD[2], 9.3540353) expect_equal(res4$STD[2], 9.2333330) expect_equal(res5$STD[2], 9.2333330) #vardf = wdf/weight when no weight variable specified res6 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, options = v(notype, nofreq, nway, vardef = "wdf")) res7 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, options = v(notype, nofreq, nway, vardef = "weight")) expect_equal(res6$STD[2], 9.3767630) expect_equal(res7$STD[2], 9.1393381) #return NA for CLM, t, prt when vardef != df res8 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("mean", "t", "clm","prt"), output = out, options = v(notype, nofreq, nway, vardef = "n")) expect_equal(is.na(res8$LCLM[2]), TRUE) expect_equal(is.na(res8$UCLM[2]), TRUE) expect_equal(is.na(res8$T[2]), TRUE) expect_equal(is.na(res8$PRT[2]), TRUE) #vardef = wdf when sum(weights)<=1 datsp <- datm datsp$Weight <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2)/100 res9 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, weight = Weight, options = v(notype, nofreq, nway, vardef = "wdf")) expect_equal(res9$MEAN[1], 42.1282051) expect_equal(is.na(res9$STD[1]), TRUE) #invalid vardef option expect_error( proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, weight = Weight, options = v(notype, nofreq, nway, vardef = "abc"))) }) test_that("means60: Weight works for stats option: n nmiss nobs min max range sum", { datsp <- data.frame( x = c(10, NA, 40, 30, NA), w = c(1, 2, NA, 1, 2) ) #n nmiss nobs res1 <- proc_means(datsp, var = c("x"), stats = c("n", "nmiss", "nobs", "min", "max", "range", "sum"), output = out, weight = "w") res1 expect_equal(nrow(res1), 1) expect_equal(ncol(res1), 10) expect_equal(res1$N[1],2) expect_equal(res1$NMISS[1], 2) expect_equal(res1$NOBS[1], 5) expect_equal(res1$MIN[1], 10) expect_equal(res1$MAX[1], 30) expect_equal(res1$RANGE[1], 20) expect_equal(res1$SUM[1], 40) }) test_that("means61: Weight available works for stats option: mean median mode", { datsp <- datm datsp$Weight <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2) #n mean std res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "mean", "median", "mode"), output = out, weight = "Weight", by = c("Layers"), class = "Flavor") res1 expect_equal(nrow(res1), 36) expect_equal(ncol(res1), 9) expect_equal(res1$MEAN[6],82.1111111) expect_equal(res1$MEDIAN[6],83) expect_equal(is.na(res1$MODE[6]),TRUE) ##when missing weight is present datsp <- datm datsp$Weight <- c(1,2,3,1,2,3,NA,2,3,1,2,3,1,2,3,1,2,3,1,2) res2 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "mean", "median", "mode"), output = out, weight = "Weight", by = c("Layers"), class = "Flavor") res2 expect_equal(nrow(res2), 36) expect_equal(ncol(res2), 9) expect_equal(res2$MEAN[6],82.50) expect_equal(res2$MEDIAN[6],83) expect_equal(is.na(res1$MODE[6]),TRUE) }) test_that("means62: Weight works for stats option: quantiles, qrange", { datsp <- datm datsp$Weight <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2) res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "p1", "p5", "p10", "p20", "p25", "p30", "p40", "p50", "p60", "p70", "p75", "p80", "p90", "p95", "p99", "q1", "q3", "qrange"), output = out, weight = "Weight",) res1 expect_equal(nrow(res1), 3) expect_equal(ncol(res1), 22) expect_equal(as.numeric(res1[1,5:ncol(res1)]),c(19,23,26,28,32,33,36,42,46,51, 55,55,62,69,69,32,55,23)) }) test_that("means63: Weight works for stats option: css cv std stderr uss vari", { datsp <- datm datsp$Weight <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2) res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "css", "cv", "std", "stderr", "uss", "vari"), output = out, weight = "Weight",) res1 expect_equal(nrow(res1), 3) expect_equal(ncol(res1), 10) expect_equal(as.numeric(res1[1,5:ncol(res1)]),c(7080.358974359,45.822405222, 19.304156867, 3.091139,76297,372.650472335)) }) test_that("means64: Weight works for stats option: t clm uclm lclm prt probt", { datsp <- datm datsp$Weight <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2) res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "t", "clm", "uclm", "lclm", "prt", "probt"), output = out, weight = "Weight") res1 expect_equal(nrow(res1), 3) expect_equal(ncol(res1), 9) expect_equal(as.numeric(res1[1,5:7]),c(13.62869969, 35.658376846,48.598033410)) }) test_that("means64: Weight works for stats option: skew kurt", { datsp <- datm datsp$Weight <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2) res1 <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("n", "skew", "kurt"), output = out, weight = "Weight") res1 #expect NA expect_equal(nrow(res1), 3) expect_equal(ncol(res1), 6) expect_equal(is.na(res1[1,5]),TRUE) expect_equal(is.na(res1[1,6]),TRUE) }) test_that("means66: Vardef with Weight", { #vardef = wdf/weight when no weight variable specified datsp <- datm res <- proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), output = out, options = v(notype, nofreq, nway, vardef = "wdf")) res expect_equal(res$STD[2], 9.3767630) expect_equal(res$MEAN[2], 76.15) }) test_that("means67: Some other cases with Weight", { #weight variable is not in data datsp <- datm expect_error(proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("n"), output = out, weight = "Weight")) #non-numeric weight variable expect_error(proc_means(datsp, var = c("Age", "PresentScore", "TasteScore"), stats = c("n"), output = out, weight = "Flavor")) # contains negative and zero weights datsp$Weight <- c(1,0,3,1,2,3,1,2,-1,1,2,3,-2,2,3,0,2,-3,1,2) res <- proc_means(datsp, var = "Age", weight = "Weight", stats = c("n", "mean")) res expect_equal(res$N[1], 20) expect_equal(res$MEAN[1], 45.379310) # all weights are NA datsp$Weight <- NA_real_ res <- proc_means(datsp, var = "Age", weight = "Weight", stats = c("n", "mean","min","max")) res expect_equal(res$N[1], 0) expect_equal(is.na(res$MEAN[1]), TRUE) expect_equal(is.na(res$MIN[1]), TRUE) # all weights are zero or negative datsp$Weight <- c(-1,0,-3,-1,-2,-3,-1,-2,-1,-1,-2,-3,-2,-2,-3,0,-2,-3,-1,-2) res <- proc_means(datsp, var = "Age", weight = "Weight", stats = c("n", "mean","min","max","median")) res expect_equal(res$N[1], 20) expect_equal(is.na(res$MEAN[1]), TRUE) expect_equal(res$MIN[1], 19) }) test_that("means67: Vardef options with weight and class work as expected.", { dat2 <- read.table(header = TRUE, text = ' Name Assessment Score Weight Smith Quiz1 84 0.05 Smith Quiz2 25 0.05 Smith Midterm 85 0.35 Smith Quiz3 0 0.05 Smith Quiz4 62 0.05 Smith Final 93 0.45 Wang Quiz1 100 0.05 Wang Quiz2 95 0.05 Wang Midterm 98 0.35 Wang Quiz3 105 0.05 Wang Quiz4 87 0.05 Wang Final 96 0.45') # No weight - OK res1 <- proc_means(dat2, var = Score, # weight = Weight, class = Name, options = c("nway"), stats = v(n, mean, median, std, min, max, vari)) expect_equal(as.numeric(res1$MEAN), c(58.166666667, 96.83333333)) expect_equal(as.numeric(res1$MEDIAN), c(73.0, 97.0)) expect_equal(as.numeric(res1$STD), c(37.6797912, 5.9805239)) expect_equal(as.numeric(res1$VARI), c(1419.766666667, 35.766666667)) # Default - No vardef option. OK res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("nway"), stats = v(n, mean, median, std, min, max, vari)) expect_equal(as.numeric(res1$MEAN), c(80.150, 96.850)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), c(10.7053958, 1.3876239)) expect_equal(as.numeric(res1$VARI), c(114.60550, 1.92550)) # vardef = wgt - OK res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("vardef" = "wgt", "nway"), stats = v(n, mean, median, std, min, max, vari)) expect_equal(as.numeric(res1$MEAN), c(80.150, 96.850)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), c(23.9379928, 3.1028213)) expect_equal(as.numeric(res1$VARI), c(573.0275, 9.62750)) # vardef = df - * Error here res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("vardef" = "df", "nway"), stats = v(n, mean, median, std, min, max, vari)) expect_equal(as.numeric(res1$MEAN), c(80.150, 96.850)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), c(10.7053958, 1.3876239)) expect_equal(as.numeric(res1$VARI), c(114.60550, 1.92550)) # vardef = wdf - No variance stats. No std. OK. res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("vardef" = "wdf", "nway"), stats = v(n, mean, median, std, min, max, vari)) expect_equal(as.numeric(res1$MEAN), c(80.150, 96.850)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$VARI), as.numeric(c(NA, NA))) # vardef = n - OK res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("vardef" = "n", "nway"), stats = v(n, mean, median, std, min, max, vari)) expect_equal(as.numeric(res1$MEAN), c(80.150, 96.850)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), c(9.7726446, 1.2667215)) expect_equal(as.numeric(res1$VARI), c(95.5045833, 1.6045833)) }) # More comparisons to SAS test_that("means68: Vardef options with other statistics work as expected.", { # NAs in Score and Weight dat2 <- read.table(header = TRUE, text = ' Name Assessment Score Weight Smith Quiz1 85 0.05 Smith Quiz2 25 0.05 Smith Midterm 85 0.35 Smith Quiz3 NA 0.05 Smith Quiz4 62 0.05 Smith Final 93 0.45 Wang Quiz1 100 0.05 Wang Quiz2 96 0.05 Wang Midterm 98 0.35 Wang Quiz3 105 0.05 Wang Quiz4 87 NA Wang Final 96 0.45') # No weight - OK res1 <- proc_means(dat2, var = Score, # weight = Weight, class = Name, options = c("nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 6)) expect_equal(as.numeric(res1$MEAN), c(70, 97)) expect_equal(as.numeric(res1$MEDIAN), c(85, 97.0)) expect_equal(as.numeric(res1$MODE), c(85, 96.0)) expect_equal(as.numeric(res1$STD), c(27.6947648, 5.9329588)) expect_equal(as.numeric(res1$VARI), c(767.0, 35.2)) expect_equal(as.numeric(res1$STDERR), c(12.3854754, 2.4221203)) expect_equal(as.numeric(res1$LCLM), c(35.6124075, 90.7737416)) expect_equal(as.numeric(res1$UCLM), c(104.3875925, 103.2262584)) expect_equal(as.numeric(res1$CV), c(39.5639498, 6.1164524)) # Weight - No vardef res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 5)) expect_equal(as.numeric(res1$MEAN), c(84.4210526, 97.4210526)) expect_equal(as.numeric(res1$MEDIAN), c(85, 96.0)) expect_equal(as.numeric(res1$MODE), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$STD), c(7.6637390, 1.0406223)) expect_equal(as.numeric(res1$VARI), c(58.7328947, 1.0828947)) expect_equal(as.numeric(res1$STDERR), c(7.8628303, 1.0676559)) expect_equal(as.numeric(res1$LCLM), c(62.5903360, 94.4567645)) expect_equal(as.numeric(res1$UCLM), c(106.2517692, 100.3853407)) expect_equal(as.numeric(res1$CV), c(9.0779950, 1.0681698)) # vardef = wgt - OK res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("vardef" = "wgt", "nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 5)) expect_equal(as.numeric(res1$MEAN), c(84.4210526, 97.4210526)) expect_equal(as.numeric(res1$MEDIAN), c(85, 96.0)) expect_equal(as.numeric(res1$MODE), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$STD), c(15.7256605, 2.1353119)) expect_equal(as.numeric(res1$VARI), c(247.2963989, 4.5595568)) expect_equal(as.numeric(res1$STDERR), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$LCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$UCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$CV), c(18.6276527, 2.1918382)) # Weight - vardef = DF res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("vardef" = "DF", "nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 5)) expect_equal(as.numeric(res1$MEAN), c(84.4210526, 97.4210526)) expect_equal(as.numeric(res1$MEDIAN), c(85, 96.0)) expect_equal(as.numeric(res1$MODE), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$STD), c(7.6637390, 1.0406223)) expect_equal(as.numeric(res1$VARI), c(58.7328947, 1.0828947)) expect_equal(as.numeric(res1$STDERR), c(7.8628303, 1.0676559)) expect_equal(as.numeric(res1$LCLM), c(62.5903360, 94.4567645)) expect_equal(as.numeric(res1$UCLM), c(106.2517692, 100.3853407)) expect_equal(as.numeric(res1$CV), c(9.0779950, 1.0681698)) # vardef = wdf - No variance stats. No std. OK. res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("vardef" = "wdf", "nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 5)) expect_equal(as.numeric(res1$MEAN), c(84.4210526, 97.4210526)) expect_equal(as.numeric(res1$MEDIAN), c(85, 96.0)) expect_equal(as.numeric(res1$MODE), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$STD), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$VARI), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$STDERR), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$LCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$UCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$CV), as.numeric(c(NA, NA))) # vardef = n - OK res1 <- proc_means(dat2, var = Score, weight = Weight, class = Name, options = c("vardef" = "n", "nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 5)) expect_equal(as.numeric(res1$MEAN), c(84.4210526, 97.4210526)) expect_equal(as.numeric(res1$MEDIAN), c(85, 96.0)) expect_equal(as.numeric(res1$MODE), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$STD), c(6.8546565, 0.9307609)) expect_equal(as.numeric(res1$VARI), c(46.9863158, 0.8663158)) expect_equal(as.numeric(res1$STDERR), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$LCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$UCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$CV), c(8.1196056, 0.9554001)) }) # More comparisons to SAS test_that("means69: Vardef options with other statistics no weight work as expected.", { # NAs in Score and Weight dat2 <- read.table(header = TRUE, text = ' Name Assessment Score Weight Smith Quiz1 85 0.05 Smith Quiz2 25 0.05 Smith Midterm 85 0.35 Smith Quiz3 NA 0.05 Smith Quiz4 62 0.05 Smith Final 93 0.45 Wang Quiz1 100 0.05 Wang Quiz2 96 0.05 Wang Midterm 98 0.35 Wang Quiz3 105 0.05 Wang Quiz4 87 NA Wang Final 96 0.45') # vardef = wgt - OK res1 <- proc_means(dat2, var = Score, class = Name, options = c("vardef" = "wgt", "nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 6)) expect_equal(as.numeric(res1$MEAN), c(70.0, 97.0)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 97.0)) expect_equal(as.numeric(res1$MODE), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), c(24.7709507, 5.4160256)) expect_equal(as.numeric(res1$VARI), c(613.60, 29.3333333)) expect_equal(as.numeric(res1$STDERR), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$LCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$UCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$CV), c(35.3870725, 5.5835315)) # Weight - vardef = DF res1 <- proc_means(dat2, var = Score, class = Name, options = c("vardef" = "DF", "nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 6)) expect_equal(as.numeric(res1$MEAN), c(70.0, 97.0)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 97.0)) expect_equal(as.numeric(res1$MODE), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), c(27.6947648, 5.9329588)) expect_equal(as.numeric(res1$VARI), c(767.0, 35.2)) expect_equal(as.numeric(res1$STDERR), c(12.3854754, 2.4221203)) expect_equal(as.numeric(res1$LCLM), c(35.6124075, 90.7737416)) expect_equal(as.numeric(res1$UCLM), c(104.3875925, 103.2262584)) expect_equal(as.numeric(res1$CV), c(39.5639498, 6.1164524)) # vardef = wdf - OK. res1 <- proc_means(dat2, var = Score, class = Name, options = c("vardef" = "wdf", "nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 6)) expect_equal(as.numeric(res1$MEAN), c(70.0, 97.0)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 97.0)) expect_equal(as.numeric(res1$MODE), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), c(27.6947648, 5.9329588)) expect_equal(as.numeric(res1$VARI), c(767.0, 35.2)) expect_equal(as.numeric(res1$STDERR), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$LCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$UCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$CV), c(39.5639498, 6.1164524)) # vardef = n - OK res1 <- proc_means(dat2, var = Score, class = Name, options = c("vardef" = "n", "nway"), stats = v(nobs, n, mean, median, mode, std, vari, stderr, clm, cv)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 6)) expect_equal(as.numeric(res1$MEAN), c(70.0, 97.0)) expect_equal(as.numeric(res1$MEDIAN), c(85.0, 97.0)) expect_equal(as.numeric(res1$MODE), c(85.0, 96.0)) expect_equal(as.numeric(res1$STD), c(24.7709507, 5.4160256)) expect_equal(as.numeric(res1$VARI), c(613.60, 29.3333333)) expect_equal(as.numeric(res1$STDERR), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$LCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$UCLM), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$CV), c(35.3870725, 5.5835315)) }) # T, P, etc. with vardef options # More comparisons to SAS test_that("means70: Vardef options with other statistics no weight work as expected.", { # NAs in Score and Weight dat2 <- read.table(header = TRUE, text = ' Name Assessment Score Weight Smith Quiz1 85 0.05 Smith Quiz2 25 0.05 Smith Midterm 85 0.35 Smith Quiz3 NA 0.05 Smith Quiz4 62 0.05 Smith Final 93 0.45 Wang Quiz1 100 0.05 Wang Quiz2 96 0.05 Wang Midterm 98 0.35 Wang Quiz3 105 0.05 Wang Quiz4 87 NA Wang Final 96 0.45') # Default - no weight res1 <- proc_means(dat2, var = Score, class = Name, options = c("vardef" = "df", "nway"), stats = v(nobs, n, p10, p25, p75, p90, t, prt, skew, kurt)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 6)) expect_equal(as.numeric(res1$P10), c(25.0, 87.0)) expect_equal(as.numeric(res1$P25), c(62.0, 96.0)) expect_equal(as.numeric(res1$P75), c(85.0, 100)) expect_equal(as.numeric(res1$P90), c(93.0, 105.0)) expect_equal(as.numeric(res1$`T`), c(5.651781457, 40.047556956)) expect_equal(roundup(as.numeric(res1$PRT), 9), c(0.004828366, 0.000000183)) expect_equal(as.numeric(res1$SKEW), c(-1.4264271, -0.6636655)) expect_equal(as.numeric(res1$KURT), c(1.5314803, 1.7610408)) # DF - with weight res1 <- proc_means(dat2, var = Score, class = Name, options = c("vardef" = "df", "nway"), weight = Weight, stats = v(nobs, n, p10, p25, p75, p90, t, prt, skew, kurt)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 5)) expect_equal(as.numeric(res1$P10), c(62, 96)) expect_equal(as.numeric(res1$P25), c(85, 96)) expect_equal(as.numeric(res1$P75), c(93, 98)) expect_equal(as.numeric(res1$P90), c(93, 100)) expect_equal(as.numeric(res1$`T`), c(10.736725813, 91.247610199)) expect_equal(roundup(as.numeric(res1$PRT), 9), c(0.000426537, 0.000000086)) expect_equal(as.numeric(res1$SKEW), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$KURT), as.numeric(c(NA, NA))) # Default - no weight res1 <- proc_means(dat2, var = Score, class = Name, options = c("vardef" = "wgt", "nway"), weight = Weight, stats = v(nobs, n, p10, p25, p75, p90, t, prt, skew, kurt)) expect_equal(as.numeric(res1$NOBS), c(6, 6)) expect_equal(as.numeric(res1$N), c(5, 5)) expect_equal(as.numeric(res1$P10), c(62, 96)) expect_equal(as.numeric(res1$P25), c(85, 96)) expect_equal(as.numeric(res1$P75), c(93, 98)) expect_equal(as.numeric(res1$P90), c(93, 100)) expect_equal(as.numeric(res1$`T`), as.numeric(c(NA, NA))) expect_equal(roundup(as.numeric(res1$PRT), 9), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$SKEW), as.numeric(c(NA, NA))) expect_equal(as.numeric(res1$KURT), as.numeric(c(NA, NA))) }) test_that("means71: where expression works as expected.", { res <- proc_means(datm, var = "Age") expect_equal(res$N, 20) res <- proc_means(datm, var = "Age", where = expression(Age < 65)) expect_equal(res$N, 19) })