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.