correlate(): when a pair of variables had too few
complete observations for cor.test() to run, the entire
call would abort. The affected cell is now left as NA and
the remaining pairs are computed normally.
correlate(), goodnessOfFitTest(),
associationTest(): the internal
options(warn = 2) used to intercept warnings was not
guarded with on.exit(), so an unexpected error could leave
the session’s global warn level permanently elevated. All three
functions now use on.exit() to guarantee
restoration.
cramersV(): Yates’ continuity correction was applied
by default for 2×2 tables (inherited from chisq.test()),
causing V to be less than 1 even for perfectly associated tables.
Cramér’s V is now always computed from the Pearson chi-squared (no
continuity correction), giving results on the correct 0-to-1
scale.
goodnessOfFitTest(), associationTest():
when a factor variable had unused levels, the extra levels were silently
included in the test with zero observed cases, changing degrees of
freedom and p-values without any indication. Both functions now issue an
informative warning when unused levels are detected, with a suggestion
to call droplevels().
modeOf(), maxFreq():
all-NA or zero-length input produced a cryptic base-R
"no non-missing arguments to max" warning and returned
empty output. Both functions now issue an informative warning and return
NA.
wideToLong(): when no column names contained the
separator string, the error came from deep inside
stats::reshape() with no hint that the cause was a
naming-convention mismatch. The function now checks for this condition
early and stops with a plain-English message.
importList(): passing an unnamed or partially-named
list produced a cryptic
"'names' must be a character vector" error from base R. The
function now checks for missing names before proceeding and stops with
an informative message. Passing an empty list now also produces a
message rather than silently doing nothing.
correlate(): when fewer than 2 numeric variables
were present in the input, the function could iterate incorrectly due to
1:(n-1) evaluating to c(1, 0) rather than an
empty sequence. Fixed with seq_len(n-1).
oneSampleTTest(): the conf.level
argument was not forwarded to stats::t.test(), so
$conf.int always contained the 95% interval regardless of
what the user requested (#9).
independentSamplesTTest(),
pairedSamplesTTest(), associationTest():
passing a tibble as data caused spurious type-check
failures. Fixed by coercing data to a plain data frame on
entry (#2).
tibble and withr added to
Suggests (used in tests only).maxFreq() and modeOf() argument checking
is more permissive.correlate() allows the user to input two numeric
vectors instead of data frames / matrices.goodnessOfFitTest(),
associationTest() added.pairedSamplesTTest() now supports long-form and
wide-form data.cohensD() argument checking is more permissive.oneSampleTTest(),
pairedSamplesTTest(), and
independentSamplesTTest() added.bars() function added.correlate() function added.pooledSD moved to a sub-function of
cohensD().cohensD() is now handled using
model.frame().expandFactors() now returns a data frame rather than a
matrix (and does so correctly for data frames with only one row).expandFactors() no longer drops cases with
NA.wideToLong() in which the reshape function
tries to create non-unique row names.quantileCut() when missing data are
present.ciMean() now handles data frames and matrices.etaSquared() that prevented it from
correctly determining marginal terms in Type II sum of squares, and
another in which the residual sum of squares was being calculated
incorrectly.wideToLong() that stopped it working if
between-subject variables did not uniquely identify the cases.cohensD() now includes a formula argument
in order to more closely mimic the syntax of t.test().cramersV() was incorrectly
calculated when used as a measure of effect size in a goodness of fit
test.longToWide() and
wideToLong() in which variable names were being treated as
regular expressions.xfun removed from package (duplicates existing
functionality).rowCopy(), colCopy(),
permuteLevels(), expandFactors(),
xfun().etaSquared() now supports Type II and Type III sum of
squares.who() now has expand = FALSE as the
default.sortFrame() now correctly returns the original data
frame when no sort terms are included.aad(),
ciMean(), cohensD(), cramersV(),
etaSquared(), importList(),
longRM(), longToWide(),
maxFreq(), modeOf(),
posthocPairwiseT(), quantileCut(),
rmAll(), sortFrame(),
standardCoefs(), tFrame(),
unlibrary(), who(), wideRM(),
wideToLong(), wideToMV().