Changes in version 1.5-1 Changes - Simplified author names in Authors@R field and removed redundant Maintainer field from DESCRIPTION. Changes in version 1.5-0 (2026-05-25) Breaking changes - var.rdf() now returns a structured list of class 'var.rdf' instead of a plain character data.frame. The three fields are: $display (character data.frame with '*', '', and '-' entries, for tabular display), $numeric (numeric matrix of absolute percentage differences), and $flagged (logical matrix, TRUE where the discrepancy exceeds limit). Code that accessed bp$var.rd as a data.frame directly must be updated to use bp$var.rd$display. - summary.bpca() no longer accepts the presentation argument. The printing behaviour previously triggered by presentation = TRUE is now handled by the new print.summary.bpca() S3 method; calling print(summary(bp)) produces the same output. New S3 methods - print.var.rdf(): printing a var.rdf object (e.g. print(bp$var.rd)) automatically displays the character table ($display). - print.summary.bpca(): separates computation from presentation following R's S3 convention. summary.bpca() now only computes and returns the summary object; print.summary.bpca() handles console output. Internal refactoring (no public API change) - New file R/bpca-utils.R introduces four shared internal helpers that eliminate duplicated code across the package: - .center_scale(x, center, scale): centering and scaling logic previously duplicated between bpca.default() and dt.tools(). - .cosine_matrix(m): pairwise cosine similarity between rows of a matrix, previously duplicated between var.rbf() and dt.tools(). - .compute_var_factor(coobj, covar): automatic variable-scaling factor for biplots, previously duplicated between plot.bpca.2d() and plot.bpca.3d(). - .pc_axis_labels(eigenvalues, dims): axis labels in "PC1 (38.5%)" format, previously duplicated between plot.bpca.2d() and plot.bpca.3d(). - plot.bpca.2d() decomposed from a single 634-line function into three files: - R/plot.bpca.2d.helpers.R: eight internal drawing functions (.draw_obj(), .draw_var(), .draw_var_seg(), .draw_circles(), .draw_axis_cross(), .proj_on_direction(), .solve_orthogonal_intersection(), .draw_circles_at()), extracted from closures that were recreated on every call. - R/plot.bpca.2d.types.R: ten internal type functions (.plot_type_bp() through .plot_type_rv()), one per switch branch, each independently readable and testable. - R/plot.bpca.2d.R: reduced to ~160 lines — validation, state preparation, context list (ctx) construction, and dispatch via switch(). - pc.names in bpca.default() is now generated once and reused for svdx.scal$v, g.scal, and hl.scal column names (previously generated twice). - The fragile while loop in plot.bpca.2d(type = 'ww') — which relied on an NA sentinel at the end of chull() output — was replaced by a for loop with circular indexing over all convex-hull edges, including the closing edge. Testing - Test suite expanded from 3 to 45 tests. New coverage includes: all four factorization methods (hj, sqrt, jk, gh); all four centering modes (center = 0:3); all four internal helpers (.center_scale, .cosine_matrix, .compute_var_factor, .pc_axis_labels); var.rbf and var.rdf (including the new list structure); dt.tools; qbpca; summary.bpca and print.summary.bpca; all ten 2D plot types; 3D static plot; plot.qbpca; and bpca.prcomp. Changes in version 1.4-3 (2026-05-11) Changes - Cleaned core functions to improve readability for AI-assisted analysis. - Manual improvements were made to some parts of the code that were refactored by AI. - Refactored core computational functions for safer input handling and improved edge-case behavior (bpca.default, bpca.prcomp, dt.tools, qbpca, var.rbf, var.rdf). - Refactored plotting internals (plot.bpca.2d, plot.bpca.3d, plot.qbpca) to reduce duplication and improve readability while preserving public API. - Improved summary and table method internals (summary.bpca, xtable.bpca, print.xtable.bpca) and fixed minor string-handling issues. - Enhanced 2D and 3D biplot diagnostics for improved visual clarity. - Improved HTML table defaults in print.xtable.bpca for type = "html" while keeping LaTeX behavior unchanged. Documentation - Updated demo scripts across demo/ (2D/3D, static/dynamic, and utilities) to align examples with the refactored plotting code. - Updated man/plot.Rd and man/qbpca.Rd to reflect the latest plotting behavior and usage. - Expanded vignettes/bpca-overview.Rmd and added vignettes/latex-bpca.Rnw to support the updated guidance and examples. - Documented print(x, type = "html") in man/print.xtable.Rd, the HTML overview vignette section, and README.md (use print() for S3 dispatch; results = 'asis' in R Markdown for HTML tables). - Refined the qbpca plotting workflow to improve internal organization and keep graphical outputs consistent. - print.xtable.bpca now supports type = "html" (via print(x, type = "html", ...)) for HTML table output, including column labels with eigenvalues; LaTeX layout is unchanged for the default type = "latex". - Standardized and modernized package documentation across man/*.Rd. - Updated package metadata files (DESCRIPTION, NAMESPACE, INDEX) for consistency with the current repository and dependency layout. - Migrated the legacy NEWS file to NEWS.md for improved rendering on GitHub and pkgdown. - Refactored vignettes/latex-bpca.Rnw for clearer didactic flow, improved visual layout, and updated examples. - Updated vignettes/latex-bpca.pdf with the new vignette formatting. - Simplified the HTML example in vignettes/bpca-overview.Rmd to use print(tbl, type = "html") directly. - Regenerated vignettes/bpca-overview.html with the updated HTML table rendering. - Removed prebuilt vignette artifacts from inst/doc/ to keep the repository clean. Testing - Added a new testthat suite under tests/testthat/ covering core bpca workflows, summary/plot smoke checks, and xtable output behavior for HTML and LaTeX. - Updated package metadata to enable automated tests (Suggests: testthat (>= 3.0.0) and Config/testthat/edition: 3 in DESCRIPTION). 1.3-10 (2026-04-25) - Faria, J. C. - Added support for vectorized var.pos in 2D and 3D plots, enabling precise manual label placement to reduce overlap. - Fixed misaligned variable-to-object projections in plot.bpca.2d (type = "eo") by rewriting projection logic to properly account for scaling. 1.3-9 (2026-04-21) - Faria, J. C. - Optimized plot.bpca.3d rendering performance when using rgl. - Fixed an issue in plot.bpca.3d that prevented variable vectors from using distinct colors. - Improved framing behavior in plot.bpca.2d and plot.bpca.3d, reducing the need for manual adjustments with var.factor, xlim, ylim, and zlim. - Improved package and function documentation. 1.3-8 (2025-10-15) - Faria, J. C. - Improved package and function documentation. 1.3-7 (2023-11-23) - Faria, J. C. - Improved package and function documentation. 1.3-6 (2023-11-20) - Faria, J. C. - Removed documentation notes as required by CRAN. 1.3-5 (2023-11-18) - Faria, J. C. - Adjusted file encoding as required by CRAN. - Performed substantial updates and improvements across package and function documentation. 1.3-4 (2021-03-23) - Faria, J. C. - Completely redid the vignette to make it simpler, more direct, and more instructive. 1.3-3 (2021-03-19) - Allaman, I. B. - Corrected a class-related bug in xtable.bpca. - Fixed a bug in print.xtable.bpca; updated related commands and aux_com1 handling so sanitize.rownames.function works properly. 1.3-2 (2020-04-01) - Allaman, I. B. - Created xtable.bpca and print.xtable.bpca. - Deprecated and removed latex.bpca, print.latex.bpca, and summary.latex.bpca; corresponding .Rd files were removed. - Updated NAMESPACE and DESCRIPTION accordingly. 1.3-1 (2018-06-16) - Allaman, I. B. - Updated latex.bpca: changed footenotes default from "" to NULL. 1.3-0 (2018-06-07) - Allaman, I. B. - Added stats, graphics, and grDevices imports in NAMESPACE to align with CRAN requirements. 1.2-2 (2013-11-23) - Faria, J. C. - Added LaTeX table export for reduction summaries (latex.bpca). - Improved parts of the source code. - Added dataset marina.rda. - Improved documentation. - Removed unnecessary require calls for packages already attached via Depends (rgl and scatterplot3d). - Released to CRAN. 1.2-1 (2012-12-12) - Faria, J. C. - Added Ivan Bezerra Allaman as co-author in the project workflow. - Added new plot options. - Added new center options. - Added new scale options. - Added new summary options. - Restricted release to testers. 1.2-0 (2012-10-06) - Faria, J. C. - Improved parts of the source code. - Removed var.position from the package; when needed, users can swap variable/object positions with bpca(t(dad)). - Restricted release to testers. 1.0-10 (2012-02-20) - Faria, J. C. - Applied cosmetic updates to plot.bpca.3d. 1.0-9 (2011-08-22) - Faria, J. C. - Applied cosmetic updates to summary. 1.0-8 (2011-04-21) - Faria, J. C. - Applied cosmetic updates to documentation. 1.0-7 (2011-04-20) - Faria, J. C. - Improved summary method. - Removed the comparison demo. 1.0-6 (2011-04-19) - Faria, J. C. - Improved aliases for summary and plot methods in documentation. 1.0-5 (2011-04-09) - Faria, J. C. - Fixed platform NOTE status in plot.bpca.3d (matrix(0, nc = 3) partial argument match of nc to ncol). 1.0-4 (2011-03-22) - Faria, J. C. - Updated plot.bpca.2d and plot.bpca.3d to show, by default, the retained variation for each principal component on axis labels. - Improved summary method. 1.0-3 (2009-06-10) - Faria, J. C. - Updated plot.bpca.2d and plot.bpca.3d to accept xlim, ylim, zlim, xlab, ylab, and zlab. - Reworked demos. - Included PDF documentation in the package. 1.0-2 (2008-07-15) - Faria, J. C. - Released to CRAN. - Applied English corrections (by Clarice). - Removed demo scripts using obj.identify = TRUE. 1.0-1 (2008-07-01) - Faria, J. C. - First restricted release (testers only).