Changes in version 0.6.14 (2026-01-30) - Responded to changes in dplyr::summarise(), where no more than one row can be returned per group. There was an issue in the aggregation vignette that required a change from dplyr::summarise() to dplyr::reframe(). - New function rename_via_pattern_byname() enables row and column renaming via regular expressions for single matrices, lists, and columns of a data frame. - Improved documentation for complete_and_sort(). - New tests for new features. - Now up to 2207 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.13 (2025-05-14) - New function reallocate_byname() reallocates some entries in a matrix to other rows or columns in proportion to remaining values in corresponding columns or rows. - Fixed an edge-case bug in fractionize_byname() when the matrix to be fractionized had only one row or column. - Additional tests for fractionize_byname(). - Improved documentation for equal_byname() by indicating the default value of the .summarise argument. - New tests for new features. - Now up to 2185 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.12 - Update test-coverage.yaml to v4 of the upload-artifact workflow. - This version not released to CRAN. - No new tests. - Now up to 2175 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.11 (2025-01-17) - Fixed a bug in to_named_matrix(), which previously errored when a matrix with any NA values was passed in the a argument. - Documented the behaviour of iszero_byname() when a matrix has any NA elements: the result is NA. - Added function reallocate_byname() to reallocate a row or column proportionally to other rows or columns. - Change default name of value column in to_triplet() from "x" to "value". - New function select_rows_cols_byname() includes margin argument that de-references row and column types, as needed. - New functions to_triplet() and to_named_matrix() convert between named matrix and triplet forms (both integer triplet and character triplet) of matrices to assist some database operations (which prefer integer triplet form). - Fixed a bug where setting rowtype or coltype attributes on a data frame resulted in the attribute set on each column of the data frame. - New tests for new features. - Now up to 2175 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.10 (2024-02-12) - Now skipping speed tests on CRAN. These tests are appropriate only for certain machines whose timings from previous runs are hard-wired into the tests. Put another way, these are not actually unit tests that verify correctness of code. They are timing tests. So no need to run these tests on CRAN (or in continuous integration tests, for that matter). - No new tests. - Still at 2113 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.9 (2024-01-31) - Now running tests in parallel. - Added performance tests. - Fixed a bug in replaceNaN_byname() where a Matrix::sparseMatrix would error when nothing needed to be replaced. - select_rows_byname() and select_cols_byname() now both (a) have grep() arguments ignore.case, perl, fixed, and useBytes, and (b) pass those arguments to grep(), enabling more flexible matching of row and column names. - New tests for fixed bugs and performance. - Now up to 2113 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.8 (2023-12-21) - Added a statement of need. - Updated the GitHub pages approach to use the gh-pages branch. - No new tests. - Still at 2095 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.7 (2023-12-01) - Added code of conduct and contributing pages to documentation. - No new tests. - Still at 2095 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.6 (2023-10-19) - Fixed a bug in matricize_byname(). If the incoming matrix had NULL rowtype, the coltype of the outgoing matrix was set to list(). The coltype of the outgoing matrix is now set to NULL, as expected. - Added new tests to verify rowtype() and coltype() behavior in matrixproduct_byname(). - New tests for new features. - Now at 2095 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.5 (2023-09-17) - Remove deprecated column argument on vec_from_store_byname(). - Remove deprecated argument matrix.class in many places. - Fixed tests to work with updated version of the Matrix package (1.6-2). - Removed a few tests dealing with deprecated arguments. - Now at 2089 tests, all passing. - Test coverage is back up to 100%, due only to deprecation code. Changes in version 0.6.4 (2023-08-18) - matsbyname::Matrix now vectorized for lists of matrix objects in the data argument. - Policy change: vec_from_store_byname() now always returns a column vector. - Deprecate the column argument of vec_from_store_byname() in favor of a new margin argument, which is standard throughout R. - Added a few new tests for vec_from_store_byname() to verify operation when multiple rows in a match v. - Added a new test for ncol_byname() to verify operation. - New tests for new features. - Up to 2092 tests, all passing. - Test coverage is at 99.41%, due only to deprecation code. Changes in version 0.6.3 (2023-05-22) - Deprecated matrix.class argument. It will be removed soon. - Renamed matrix.class argument to matrix_class. - New tests for matrix.class --> matrix_class transition. - Still at 2085 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.2 - Move to latest version of GitHub test coverage workflow. - This version not released to CRAN. - No new tests. - Still at 2082 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.1 (2023-04-25) - equal_byname() gains tol argument to control the precision with which equality is decided. - Fixed a bug where equal_byname() wasn't using equal_matrix_or_Matrix(). As a result, it was difficult to tell whether a matrix and a Matrix were equal. - New tests for new features. - Now at 2082 tests, all passing. - Test coverage remains at 100%. Changes in version 0.6.0 (2023-03-04) - Fixed a bug in aggregate_pieces_byname() where failure occurred if there were repeated row (or column) names not included in the aggregation_map. - All functions now work with Matrix objects, thereby enabling use of sparse matrices. Use matsbyname::Matrix() to create sparse matrices if desired. - create_matrix_byname() gains matrix.class argument that tells whether the created object is of class matrix or Matrix. Default is "matrix". - New function is.Matrix() assists with determining whether an object is a Matrix. The base functionis.matrix() assists with determining whether an object is a matrix. - First function (sum_byname()) now works with Matrix objects, paving the way for sparse matrix representation throughout matsbyname. - In tests, cleaned up many warnings emanating from the change to testthat v3. - Reacted to a change in grouping policy in dplyr that caused one test to issue a deprecation warning. - Update to latest GitHub actions continuous integration workflow. - Many new tests for new features. - Now at 2078 tests, all passing. - Test coverage remains at 100%. Changes in version 0.5.1 (2023-01-16) - Responded to deprecation warnings from purrr::cross2(). - Responded to deprecation warnings from tidyselect. - transpose_byname() no longer converts a constant into a 1x1 matrix without row or column names. - New function select_rowcol_piece_byname() enables selecting rows and columns using the RCLabels notation and label pieces. - New function svd_byname() calculates singular value decomposition of a matrix. - New argument method on invert_byname() allows callers to select the method for inverting a matrix. - New functions eigenvalues_byname() and eigenvectors_byname() calculate eigenvalues and eigenvectors of matrices or lists of matrices. - Added tol argument added to invert_byname(). The value of the tol argument is passed to base::solve(). - invert_byname() now reports names of zero rows and columns when attempting to invert a singular matrix. The new error message will be a huge help for debugging. - New functions select_zero_rows_byname() and select_zero_cols_byname() assist with detecting problem areas for singular matrices. - rowsums_byname(), colsums_byname(), and sumall_byname() now correctly return only a single number when a single number is the input. - aggregate_byname() now returns its argument (a_mat) if a string margin resolves to NA (isn't a row of column type). - Aggregation vignette now demonstrates that - margins for renaming and aggregating can be determined from row and column types and - inference on row and column label notation. - Renaming and aggregation functions now (by default) infer row and column notations. - Many new tests for new features. - Now at 1165 tests, all passing. - Test coverage remains at 100%. Changes in version 0.5.0 (2022-04-01) - New format for documentation pages, including a search function! - New vignette "Using summarise in matsbyname" clarifies issues around ambiguities in functions that use a ... argument. - aggregation-vignette now includes details on using sum_byname(.summarise = TRUE) with dplyr::summarise(). - sum_byname(), matrixproduct_byname(), hadamardproduct_byname(), mean_byname(), geometricmean_byname(), equal_byname(), identical_byname(), samestructure_byname(), and and_byname() all gain argument .summarise to signal intention to operate down a column (.summarise = TRUE) or along a list (.summarise = FALSE). The default value is .summarise = FALSE, thereby maintaining previous behavior. - New functions agg_table_to_agg_map() and agg_map_to_agg_table() assist with manipulating aggregation maps. - New vignette aggregation-vignette demonstrates the new aggregation functions. - Functions rename_to_pref_suff_byname() and aggregate_to_pref_suff_byname() now route to new functions rename_to_piece_byname() and aggregate_pieces_byname(), thereby avoiding code duplication. This change may break some code. These functions now return an empty string ("") when a suffix is requested and one is not found. Previously, these functions returned the entire string when a suffix was not found. - New function aggregate_pieces_byname() brings the flexibility of the RCLabels to matsbyname. - Remove (comment for now) notation functions in notation.R that have been moved to RCLabels. - New function rename_to_piece_byname() will assist with renaming and aggregating according to pieces of row and column names. - New function vec_from_store_byname() creates vectors from a matrix (from which row of column names are taken) and a vector (which acts as a store of values) based on matching of pieces of the labels. This new function is made possible by the new RCLabels package. - Notation code moved to new package, RCLabels. - RCLabels::make_or_pattern() gains new pattern_type, "literal", which returns the row_col_names argument unmodified. - trim_rows_cols() gains a warn_if_a_incomplete argument. When TRUE, a warning is issued if argument a is missing entries on margin that are present in mat. - Many new tests for new features. But some functions have been moved to RCLabels, so the total number of tests has gone down slightly. - Now at 1072 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.25 (2021-10-12) - New notation functions preposition_notation(), from_notation(), and of_notation(). - Many new tests for new features. - Now at 1077 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.24 (2021-10-02) - Added a test to trigger errors when dimnames are NULL. - Fixed a bug where a 0x0 matrix was not being completed by another matrix. - New function trim_rows_cols() eliminates rows and/or columns in one matrix based on another. - Many new tests for new features. - Now at 1057 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.23 (2021-09-02) - hatize_byname() now allows a missing keep argument, eliminating a regression in reverse dependency with the matsindf package. - This release is for CRAN. - One test could be deleted, because the hatize_byname() function is now simpler. - Now at 1039 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.22 - Now issuing a helpful warning when hatize_byname() is called with a keep argument that is different from the structure of the vector. This will be a safe way to encourage callers to specify their expectations in the function call. - Note this version was not released to CRAN, due to frequent revisions. - New tests for new features. - Now up to 1040 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.21 - hatize_byname() and hatinv_byname() gain a new argument keep that tells whether to keep row names or column names when a 1x1 matrix is supplied. This feature assists with code that may occasionally encounter 1x1 vectors as input. - Note this version was not released to CRAN, due to frequent revisions. - New tests for new feature. - Now up to 1030 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.20 (2021-07-21) - New function keep_pref_suff() keeps prefixes or suffixes of individual strings or lists of strings, based on the notation provided. - New tests for new functions. - Now up to 1025 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.19 (2021-07-18) - Breaking change: New logic for situations where prefix or suffix is not found in split_pref_suff(). Previously, NULL was returned for a missing prefix or suffix. Now, an empty string ("") is returned. - New tests for whether split_pref_suff() works in a data frame. - New tests for new logic. - Now up to 1009 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.18 (2021-06-03) - New function kvec_from_template_byname() that creates a row or column vector from a template matrix. - New function create_colvec_byname() builds on create_matrix_byname(). - New function create_rowvec_byname() builds on create_matrix_byname(). - New function create_matrix_byname() that behaves much like matrix() with "byname" characteristics. - New tests for new functions. - Now up to 1000 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.17 - Transition to GitHub actions for continuous integration. - No new tests. - Still at 906 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.16 (2020-11-26) - Moved URLs to https:// where appropriate. - Fixed a bug in rename_to_pref_suff_byname() where a column vector would fail with "subscript out of bounds" error. The fix was to wrap the return list containing "pref" and "suff" in a list, as the rest of the function expected, when a single row was present. - Fixed a bug in colsums_byname() and rowsums_byname() where setting the rowname or colname argument to NULL did not result in an empty row name or column name. - Fixed a bug in hatize_byname() where a 1x1 vector gave error: length of 'dimnames' [1] not equal to array extent. The solution is to check for 1x1 vectors and act accordingly. - Fixed a warning emitted from stringi. - New tests for bug fixes. Now up to 906 tests, all passing. - Test coverage remains at 100%. Changes in version 0.4.15 (2020-05-29) - Added additional tests for new features. - Now up to 900 tests, all passing. - Test coverage remains at 100%. - Added tol argument to clean_byname(), allowing for machine precision issues to be addressed. - Ensured that all old functions, such as rename_to_pref_suff_byname(), aggregate_byname(), and aggregate_to_pref_suff_byname() respect notation when using notation to renaming rows and columns. - New functions for manipulating names of rows and columns: notation_vec(), arrow_notation(), paren_notation(), bracket_notation(), split_pref_suff(), join_pref_suff(), flip_pref_suff(), switch_notation(), and switch_notation_byname(). - Eliminated a warning in GitHub actions about README.md requiring a nonempty