ternStyle(): Applies full
TernTables ‘Word’ formatting to any user-supplied tibble — font, header
shading, borders, caption, footnote, and citation footer — without
running it through the ternG()/ternD()
pipeline. Supports subheader_rows, bold_rows,
italic_rows, bold_cols,
italic_cols, bold_sig (cell-level p-value
bolding for non-standard column names), and
header_format_follow. Returns a tibble with a
ternB_meta attribute for direct use in
ternB().
classify_normality(): Exposes the
internal ROBUST normality routing algorithm as an exported function.
Returns a tidy tibble with per-variable × per-group statistics (n,
skewness, excess kurtosis, Shapiro-Wilk p), the gate that triggered the
routing decision, a plain-language gate_reason, and the
final parametric/non-parametric routing outcome. Intended for manuscript
auditing and responding to reviewer questions about normality
assessment.
ternG()
force_normal — Bypass all normality assessment for
listed variables; always route to mean ± SD and Welch tests.
Per-variable counterpart to force_ordinal.
force_ordinal takes priority when a variable appears in
both.force_continuous — Bypass automatic binary 0/1
detection for listed variables so they are analysed as continuous rather
than converted to Y/N categorical.show_p — When FALSE, suppresses the P
value column and all associated columns (OR, test, normality), producing
a descriptive-only grouped table.percentage_compute — "column" (default) or
"row". Controls the denominator for categorical
percentages. When "row", the Total column is automatically
suppressed.categorical_posthoc — For three-or-more-group
comparisons, computes Haberman’s adjusted standardized residuals
following a significant omnibus test (p < 0.05). Cells exceeding
±1.96 are annotated with *. The ±1.96 threshold derives
from the omnibus chi-squared distribution; no additional
multiple-comparisons correction is required.p_adjust — When TRUE, applies
Benjamini-Hochberg (BH) false discovery rate correction to all omnibus P
values.p_adjust_display — "fdr_only" (default)
replaces the P column with BH-corrected values; "both"
retains raw values alongside the corrected column.show_missing — When TRUE, appends a
Missing: n (%) sub-row beneath each variable showing
per-group missing counts. Footnote added automatically.show_missingness — FALSE (default),
"total", or "group". Appends dedicated
missingness percentage column(s): one overall column
("total") or one interleaved column per group
("group"). Counts both NA and string
representations of missing data.missing_indicators — Custom character vector that
replaces the built-in string-NA list when computing missingness columns
(requires show_missingness to be active). Matching is
case-insensitive.zero_to_dash — When TRUE, replaces
"0 (0%)" cells with "-" in categorical
output.round_decimal — Integer; overrides the default 1
decimal place for all continuous summary values. Ignored when
round_intg = TRUE.font_family — Font used throughout all ‘Word’ output.
Defaults to getOption("TernTables.font_family", "Arial");
set package-wide with
options(TernTables.font_family = "Times New Roman").citation — When TRUE (default), embeds a
full package citation as a page footer in every exported
.docx and at the end of the methods document.open_doc — When TRUE (default), opens the
written .docx in the system default application after
saving. Set FALSE to suppress (useful in scripted or
server-side workflows).plain_header — Named character vector (same interface
as category_start). Inserts a label-only row with underline
formatting and no bold, merge, or border treatments. Also accepted by
word_export().abbreviation_footnote, variable_footnote,
index_style — Structured footnote system.
abbreviation_footnote prints first.
variable_footnote (named character vector) auto-assigns
*, †, ‡ … as superscripts to
named variables in column 1 and appends definitions below the table.
index_style = "alphabet" uses Unicode superscript letters
instead. Pipe- separated keys ("Var A|Var B") assign one
shared symbol and footnote to multiple variables.ternD(): force_normal,
force_continuous, plain_header,
show_missing, show_missingness,
missing_indicators, zero_to_dash,
round_decimal, font_family,
citation, open_doc — all behave identically to
the ternG() descriptions above.
show_missingness = "group" raises an informative error
directing the user to ternG().
ternP()
mode — "auto" (default) or
"manual". In "manual" mode, the PHI
column-name hard-stop is skipped and a prominent warning is emitted; all
other cleaning steps still run. Intended for datasets that trigger
false-positive PHI flags (e.g. a column named "Address"
that contains a non-PHI clinical field). Use drop_cols to
explicitly remove identifier columns in this mode.extra_na — Character vector of additional strings to
treat as NA, appended to the built-in list. Example:
extra_na = c("9999", "Not Done", "PENDING").drop_cols — Character vector of column names to drop
before cleaning begins. Names not found in the data are silently
ignored.The preprocessing summary now includes a Missingness Summary section listing every column with at least one missing value (count and percentage), computed on the fully cleaned data. The section is suppressed when no missing values exist.
word_export(), ternB(),
ternStyle(): font_family,
round_decimal, citation (as described for
ternG()). word_export() and
ternStyle() additionally accept bold_sig
(named list for cell-level p-value bolding of custom tibbles with
non-standard p-value column names).
write_cleaning_doc():
open_doc and citation added for consistency
with all other Word-output functions.
write_methods_doc() redesigned:
generates a single dynamic paragraph tailored to the actual run
(descriptive, two-group, or three-or-more-group) rather than a fixed
three-section boilerplate. boilerplate = TRUE writes a
comprehensive reference document covering all five standard
configurations. ternB(methods_doc = TRUE) generates one
labeled methods section per table, deduplicating tables with identical
configurations.
fisher.test() segfault
(ternG): Tables larger than 2×2 now route directly to Monte
Carlo simulation (simulate.p.value = TRUE, B = 10,000).
Previously the C-level exact algorithm could segfault on tables with
many levels, killing the R session — a condition that
tryCatch cannot intercept.ternG): Variables reduced to one non-NA level
after string-NA removal now display
NA (insufficient variation) for the p-value instead of
crashing the entire ternG() call.methods_filename = NULL crash
(ternG, ternD,
write_methods_doc): Passing NULL explicitly
now resolves to the default "TernTables_methods.docx"
rather than throwing a dirname(NULL) error.categorical_posthoc crashes
(ternG): Fixed three independent issues — (1)
stdres returning a vector instead of a matrix caused an
if() condition to error; (2) NA factor level
names bypassed %in% guards causing subscript-out-of-bounds;
(3) cat_posthoc_fisher_display was referenced before being
extracted from .ternG_env.ternG):
Factor levels named "" (common in UNOS/SRTR
haven_labelled data) produced NA (NA%) because
as.data.frame.matrix() silently renames "" to
"X" via make.names(). Fixed by saving column
names before conversion and restoring them explicitly; all 2D cell
lookups now use integer indexing via match().ternB() tables:
Stripped the default blank paragraph from each temp document,
eliminating spurious blank pages in combined output.ternB(): Page
footer from one table’s temp document no longer carries over into
subsequent tables in the combined file.rstatix and
multcompView moved to Imports (were
Suggests), ensuring compact letter display superscripts
always work without a separate install step.word_export): fit_to_width(6.5) is now
applied after autofit() only when the table exceeds Letter
page width (6.5 in), preventing column truncation in ‘Word’ and PDF
exports..apply_cleaning_rules() patterns that incorrectly
transformed variable names containing medical abbreviations and unit
suffixes (e.g. "Gy" in radiation dose variables).bold_sig column-name mismatch
(word_export, ternStyle):
word_export() renames columns internally
(e.g. "P" → "P value", spaces →
\n when line_break_header = TRUE). The
bold_sig lookup was comparing caller-supplied names against
already-renamed columns, so HR bolding was silently skipped. Fixed by
building an original-to-renamed name map before the lookup.<<-
eliminated: All accumulator patterns using
<<- inside nested closures in ternG.R,
ternD.R, and ternP.R replaced with
new.env(parent = emptyenv())-based counters. No
user-visible change.set.seed() replaced with
withr::with_seed(): RNG state is now scoped
locally within the Monte Carlo Fisher’s exact fallback, restoring the
caller’s state after the call. withr added to
Imports.utils_normality.R.multcompLetters() default alphabetical ordering
is now used directly, aligning with standard CLD conventions.patient_id,
subject_id, participant_id, and clinical-event
date patterns removed from the flag list; only personal-identity
patterns (DOB, DOD) remain..tern_missing_strings() and
.is_missing_value() extracted to
utils_preprocess.R as a single source of truth used by both
ternP() and the show_missingness columns in
ternG()/ternD().ternG() description,
vignette, and README stating that all tests assume independent
observations.<<- in
R/ternG.R, R/ternD.R, and
R/ternP.R. Accumulator patterns replaced with
new.env(parent = emptyenv())-based counters; the
dplyr::across() lambda in ternP.R replaced
with an explicit for loop. No change to user-visible
behavior.set.seed() with
withr::with_seed() in the Monte Carlo Fisher’s exact
fallback, scoping the seed locally and restoring the caller’s RNG state.
withr added to Imports.Authors@R at her
request.\dontrun{} blocks replaced with
\donttest{} across all exported functions. Examples that
write files to disk use \donttest{} because the ‘Word’
export operations may exceed 5 seconds on slower machines; no missing
software or API keys are required.Description field of DESCRIPTION per CRAN
policy: ‘Word’, ‘Excel’, ‘tibble’, ‘officer’, ‘flextable’, ‘writexl’,
‘rstatix’.?TernTables) updated:
normality routing description corrected to four-gate algorithm;
.onLoad now explicitly initialises
TernTables.line_break_header option.val_format() now uses the Unicode plus-minus symbol (±)
for consistency with ternG() and ternD()
output.utils_naming.R: single-word variable names
(e.g. age, sex, race) now
correctly flow through the abbreviation map and capitalisation rules in
.apply_cleaning_rules().ternG() (e.g. Male/Female shown with
1.00 (ref.) and computed OR with 95% CI). Previously only
Y/N and 0/1 binary variables received ORs.factor_order = "mixed" option to
ternG() and ternD().utils_posthoc.R with center-based letter ordering (highest
center = “a”).getOption("TernTables.seed")).utils_preprocess.R to reduce false positives on common
research variable names.?TernTables).URL: and BugReports: fields to
DESCRIPTION.ternP(): preprocessing function for raw CSV/XLSX
data. Handles string NA conversion, whitespace trimming, empty column
and blank row removal, and case normalisation. Hard-stops on PHI column
name patterns and unnamed columns with data.write_cleaning_doc(): writes a ‘Word’ audit
document recording every transformation applied by
ternP().tern_colon_messy.csv to
inst/extdata/csv/ for use in ternP()
examples.line_break_header parameter refined: improved behaviour
for edge-case column widths in ternG(),
ternD(), and word_export().consider_normality = "ROBUST", now the default). Four-gate
algorithm applied per group: (1) n < 3 fail-safe to non-parametric;
(2) |skewness| > 2 to non-parametric; (3) all groups n ≥ 30 to
parametric via CLT; (4) Shapiro-Wilk p > 0.05 to parametric.
Implemented in both ternG() and ternD().ternB(): combines multiple TernTables result
tibbles into a single formatted ‘Word’ document.table_caption parameter to ternG(),
ternD(), and word_export(): places a bold
caption above the table in the ‘Word’ output.table_footnote parameter to ternG(),
ternD(), and word_export(): adds a merged
footer row below the table.line_break_header parameter to
ternG(), ternD(), and
word_export(): wraps long column headers onto two lines in
‘Word’ output.write_methods_doc() now generates a methods paragraph
tailored to ternB() multi-table output.ternG(): grouped comparison table for 2- and 3-level
group variables, with optional odds ratios (OR_col),
normality testing, and post-hoc test framework.ternD(): descriptive summary table with no group
comparisons.word_export(): exports any TernTables tibble to a
formatted ‘Word’ document.write_methods_doc(): generates a boilerplate
statistical methods paragraph.val_format() and val_p_format():
formatting utilities for publication-ready numeric and P value
display.