                      Changes in version 0.1.7009                       

[0.1.7] - 2026-10-15 (CRAN release)

Fixed

  - Fixed get_ref_info() to accept ref_path = NULL (#359).
  - Fixed junco_get_stats() to inherit any default stats from tern that
    are not explicitly defined in junco.
  - Fixed get_ref_info() so that is works in the presence of "overall"
    column (#332)
  - CRITICAL: hotfixed tt_to_tlgrtf() lost titles in certain cases
    (#373)
  - CRITICAL: hotfixed def_colwidths() when a column label is too long
    (#281)

Changed

  - Added "unique_fraction" as a new statistic supported by s_freq_j()
    and a_freq_j() (#519).
  - Added lowercase_words argument to string_to_title() to keep
    specified words lowercase (#524).
  - Added .cell_footnotes and .row_footnotes arguments to format_stats()
    (#470).
  - Removed s_proportion_diff_j() which was a wrapper around
    tern::s_proportion_diff(). The label and conf_level parameters moved
    to a_proportion_diff_j() (#442, #467).
  - Renamed internal functions s_rel_risk_val_j() and
    s_rel_risk_levii_j() to s_risk_diff_val_j() and
    s_risk_diff_levii_j() to correctly reflect that they compute risk
    difference (p1 - p2), not relative risk (p1 / p2) (#442).
  - Updated several analysis functions to use h_get_cur_trt_grp()
    (#295).
  - Replaced h_get_trtvar_refpath() with h_get_cur_trt_grp() (#295).
  - Updated get_ref_info() for matching column split paths (#295).
  - Added the new helper function factor_by_order() (#425).
  - Renamed in_ref_col() to in_column() and renamed its ref_path
    argument to col_path.
  - Updated in_ref_col() to accept ref_path = NULL (#404).
  - Added the new helper functions cur_col_split_path() and in_column()
    to support custom analysis functions that depend on the current
    column split context (#404).
  - Added a default value for the label argument in
    c_summary_subset_label().
  - Updated the documentation of a_summary_subset().
  - Refactored prepend_label_cell(); Only RowsVerticalSection is now
    supported.
  - Removed filter_df_prior_afun(), a_summary_diff_mvars(),
    a_summary_diff_mvars_label().
  - Removed formatters exports #317
  - Deprecate a_coxph_hr for tern:::a_coxph_pairwise() and s_coxph_hr
    for tern:::s_coxph_pairwise() #158
  - Reduce sampling of rbmi test to make tests shorter (#323)
  - Optimize shared tables in test-tt_to_tblfile (#323)
  - Changed forked h_ancova for the tern one
  - Add extra statistics to a_eair100_j and introduce scaling factor
    num_p_year (default = 100) (#361)
  - Removed ellipsis argument from a_freq_resp_var_j (#236)
  - Removed dplyr from junco and replaced by base R #201
  - Replaced assertthat by checkmate for consistency #201
  - Remove stringi from dependencies #201
  - Deprecate rbmi_analyse(), make_rbmi_cluster(), par_lapply() for rbmi
    equivalent functions #367
  - Deprecate a_kaplan_meier() for tern::a_surv_time()
  - Changed the label for range_with_cens_info from "Min, max" (junco)
    to "Min - Max (with censoring)" and the argument from lsmean_diffci
    to lsmean_diff_with_ci
  - Deprecate s_coxph_hr() for tern:::a_coxph_pairwise()
  - Changed stop message in a_freq_j() when label_map option is used in
    a rowsplit with no data on a character analysis var #386
  - Use new exported splv_extra and value_expr accessors
    (insightsengineering#1098)
  - Update new exported calls from rtables.officer
  - update documentation to roxygen2 8.0.0
  - Add extra statistics to a_eair100_j and introduce scaling factor
    num_p_year (default = 100) (#361)
  - Updated behavior of formatting functions
    jjcsformat_count_denom_fraction and jjcsformat_fraction_count_denom
    and introduce functions jjcsformat_count_denom_fraction_legacy and
    jjcsformat_fraction_count_denom_legacy for backward compatibility
    reasons (#450)
  - Updated insightsengineering urls to pharmaverse
  - Renamed and refactored postfun_eq5d into stats_in_cols_setup
  - Added factor assertion on .var in s_freq_j (#453).
  - Added assertions for the id argument in a_freq_j() and s_freq_j()
    (#424).

Added

  - Added jjcsformat_percentage() for formatting percentage values
    (#519).
  - Added a new analysis function a_combo_prop_diff_pval_mf() for
    proportions, risk differences, and risk difference tests with
    adaptive Mantel-Fleiss-based method selection (#517).
  - Added s_test_proportion_diff_mf() and a_test_proportion_diff_mf()
    adaptive test of stratified response-proportion differences using
    the Mantel–Fleiss criterion (#457).
  - Added s_proportion_diff_mf() and a_proportion_diff_mf() adaptive
    estimation of stratified response-proportion differences using the
    Mantel–Fleiss criterion (#456).
  - Added a_cond_proportion_j() which implements conditional method
    selection between Wald and Clopper-Pearson confidence intervals
    based on the number of responses and the denominator (and the method
    selection can either be done on cell level or on row level).
  - Added a_sum_ratio_j() analysis function for computing sum,
    unique-row sum, and their ratios against a denominator column.
  - Added strict_match() for uniquely matching a value in the odd or
    even positions of a character vector.
  - Added categorize_pval() for assigning p-values to validated,
    user-defined categories.
  - Added pool_rubin_scalar() and pool_z_stat() for pooling scalar
    estimates and z statistics across imputations.
  - Added resp_multiple_imputation() to impute missing binary responses
    across scenarios and pool CMH risk-difference and p-value results.
  - Updated documentation and examples for label_map in a_freq_j (#235)
  - Added tern methods for difference in proportions in a_freq_j and
    a_freq_resp_var_j : cmh_sato, cmh_mn, uncond_exact_diff (#389)
  - Added a_summary_j_with_exclude() to allow tern::a_summary() analyses
    to be skipped for selected row split levels.
  - Added a_summarize_mmrm_with_exclude() to allow MMRM summaries to be
    skipped for selected row split levels.
  - Added rightside() to extract the right-hand side of a formula as a
    scalar character value.
  - Added a_three_tier() as extension to a_two_tier().
  - Added formatting function format_sigfig_j() as alternative to
    tern::format_sigfig(). (#436)
  - Added new standard column structure functions:
    make_multicomp_splfun(), grouped_cols_w_diffs(),
    grouped_cols_w_subgrps(), shift_tbl_col_struct(), and
    some_v_all_col_struct().
  - Added varying decimal precision utility functions fmt_spec_single_d,
    fmt_spec_df_d, fmt_spec_var_d. (#474)
  - Added utility functions get_fmt_details and compare_fmt_specs for
    reviewing format specification objects.

0.1.6 - 2026-05-05 (CRAN release)

Fixed

  - Fixed s_kaplan_meier() range censoring indicator handling to no
    longer produce NA values in the output when either all subjects are
    censored or none are censored.
  - Aligned a_freq_resp_var_j() with a_freq_j() by adding .formats and
    na_str parameters to allow user customization of output formatting
    and NA string representation (#67).
  - Fixed the hanging indent in the first column of the body of the
    table (#138)
  - Export leftside(), postfun_eq5d ac_blank_line and tt_to_tblfile
  - Minor bugfix in DOCX exporter when calculating the number of pages
    (#188)
  - Fixed tt_to_flextable_j() to have correct left-indentation in header
    col 1 (#171) and footer first line starting with newline (#171)
  - Fixed relative risk difference derivations for combined column
    facets in a_freq_j(), a_freq_resp_var_j() and a_eair100_j() (#195)
  - Fixed calculation of 'reduce_first_col_indentation' and section
    break positions in insert_keepNext_vertical_pagination() (#218)
  - Fixed the little gaps in neighboring spanning headers in the docx
    exporter (#216)
  - Fixed blank pages happening at the end of the docx (#177)
  - DOCX exporter fixed watermark location in case of listings
  - DOCX exporter updated table border width from 0.75 to 0.875 inches
  - DOCX exporter when having vertical pagination in tables or listings,
    fixed the rows misalignment from page 2 and below compared to RTF
  - Fixed bug in s_summarize_desc_j() when applied to almost constant
    data due to behavior from t.test.default() (#257)
  - tt_to_tlgrtf() now is passing vectorized colwidths when exporting
    'allparts' to match the colwidths of the individual parts (#225)

Changed

  - Updated c_summary_subset_label(): removed .spl_context argument and
    renamed subset_expr to filter_expr.
  - Renamed a_summary_j() to a_summary_subset() and updated its purpose,
    implementation, and arguments.
  - Added new stats/labels/formats/indents to
    junco_utils_default_stats_formats_labels.r file.
  - Renamed s_diff_mean_ci() to s_diff_means(), and added new statistics
    to s_diff_means().
  - Moved safe_t_test() from a_summarize_aval_chg_diff.R to a new file
    safe_t_test.R,
  - Moved add_blank_line_rcells() from s_functions.R to blank_line.R.
  - changed return value n for s_ancova_j into n_fit, to differentiate
    between these two statistics for combined function
    s_summarize_ancova_j() (#117)
  - added default label for median_range "Median (min, max)" in
    junco_default_labels_start
  - changed label from "experimental" to "stable" for
    default_stats_formats_labels
  - refactored functions tt_to_flextable_j() and export_as_docx_j()
  - created generic wrapper function export_TLG_as_docx(), which now
    calls export_as_docx_j() and export_graph_as_docx() (#173)
  - Functions export_as_docx_j() and export_graph_as_docx() still exist
    but are now internal, i.e. not exported
  - updated vignette to explain correctly how to insert newlines in the
    headers of Tables and Listings (#179)
  - "watermark" argument in the docx exporter is now a String instead of
    a Boolean (#181)
  - faster docx unit tests (#197)
  - LS means tabulation uses very slightly updated column header (no
    blanks around the hyphen in "Testing-Reference")
  - Bump flextable and remove the skip() units tests (#193)
  - Update colwidths tests to derive values
  - Fix old TODOs in tests
  - docx exporter added missing defaults (#186)
  - Changed all snapshot tests to cran = TRUE
  - Footnotes in docx and RTF outputs are now 1 table row/cell (#285)
  - removed label "experimental" for theme_docx_default_j,
    tt_to_flextable_j and export_TLG_as_docx

Added

  - Added a_diff_means(), which is based on the existing s_diff_means().
  - Added multi-comparator functionality (#271)
  - Hotfix: Added several new functions for creating the Vital Sign
    tables for core and clinpharm: a_summary_diff_mvars(),
    a_summary_j(), c_summary_subset_label(), filter_df_prior_afun(),
    prepend_label_cell(), s_diff_mean_ci(), s_summary_diff(),
    safe_t_test() (#304).
  - Added option to perform a_summarize_ancova_j in a layout with a
    combined column facet (#117) + slight change in return value for
    s_ancova_j(), now we have n_fit instead of n returned
  - Added option to switch on/off the export of the csv in both
    tt_to_tlgrtf() and export_as_docx_j()
  - Added option to specify the output folder for the csv
  - Added argument 'validate' to export_TLG_as_docx() and
    tt_to_flextable_j() (#213)
  - Added "watermark" argument in the docx exporter for Figures (#181)
  - Added argument mult_adj_emmeans in fit_mmrm_j() to enable
    (single-step or step-down) Dunnett multiplicity adjustment for LS
    means contrasts (p-values and confidence intervals) for more than
    one experimental arm within visits.
  - Added option for subgroup variable in the vars argument of
    fit_mmrm_j() to enable fitting an overall MMRM with subgroup
    interaction terms.
  - Export helpers for LS means tabulation: lsmeans_wide_cfun,
    lsmeans_wide_first_split_fun_fct, lsmeans_wide_second_split_fun_fct
  - Added lifecycle to suggests

0.1.5 - 2026-03-03 (minor hotfix release)

Added and Removed

  - Added new behavior for nested countsource in h_a_freq_dataprep
    altdf_subset (#200)

0.1.4 - 2026-02-02 (minor hotfix release)

Fixed

  - "caption" paragraph style in the docx exporter is now handled by
    flextable (#182)
  - Fixed tt_to_tlgrtf(), when exporting an empty listing do not lose
    Title and Footers
  - Fixed tt_to_tlgrtf() argument label_width_ins which was not applying
    the change in the row label column width (#166).

Changed

  - Reinstate rbmi as dependency

0.1.3 - 2026-01-12 (minor hotfix release)

Changed

  - Address CRAN NOTES.

0.1.2 - 2025-12-10

Added and Removed

  - Add a_two_tier() analysis function
  - Add a_maxlev() to be able to calculate count and percentage of the
    maximum level of an ordered factor per subject
  - Remove brackets_to_rtf()
  - Export rbmi_pool() #22
  - Add functionality to a_freq_j() to process val = NULL from levels
    specified in label_map, as well as the modified version
    a_freq_j_with_exclude() that allows to exclude the analysis from
    specified row splits. #95
  - Add a_cmhrms_j() to support p-value from CMH row mean score test, as
    well as the modified version a_cmhrms_j_with_exclude() that allows
    to exclude the analysis from specified row splits. #97
  - Added standard error (SE) column for each treatment arm's least
    square (LS) means estimate to the summarize_lsmeans_wide() layout.
  - Added the internal function do_exclude_split() to facilitate the
    exclusion of specified row splits from analysis functions.
  - Remove some unused functions (jj_uc_map, postfun_cog, column_N,
    non_blank_sentinel, null_fn, unicodify
  - Add extra check for existence of .alt_df_full when layout has risk
    difference column and a row-split (h_create_alt_df) #120.
  - Add docx exporter for Tables, Listings and Figures.
  - Add alignments argument in tt_to_tlgrtf()
  - Removed s_test_proportion_diff() and corresponding helper functions,
    as they are now available as needed in the tern package.
  - Added cmh_sato and cmh_mn (Cochran-Mantel-Haenszel stratified
    proportion difference estimation with Sato variance and Miettinen
    Nurminen method, respectively) method options to the
    s_proportion_diff_j() function.
  - Added formatting function round type (#76)

  - Fixed bug in s_summarize_desc_j function to handle sparse data (zero
    variance) cases (#78)

0.1.1 - 2025-07-28

Added

  - First release of the junco package for Table and Listing (TL)
    Reporting
  - Functions to produce tables and listings in R
  - Built on the rtables package framework
  - Integration with formatters, rtables, tidytlg, and tern packages

Changed

  - Initial CRAN release

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to
Semantic Versioning.
