matsbyname
Cite all releases with doi 10.5281/zenodo.5118872, which always resolves to the latest release.
to_named_matrix()
, which previously
errored when a matrix with any NA
values was passed in the
a
argument.iszero_byname()
when a
matrix has any NA
elements: the result is
NA
.reallocate_byname()
to reallocate a row
or column proportionally to other rows or columns.to_triplet()
from “x” to “value”.select_rows_cols_byname()
includes
margin
argument that de-references row and column types, as
needed.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).replaceNaN_byname()
where a
Matrix::sparseMatrix
would error when nothing needed to be
replaced.select_rows_byname()
and
select_cols_byname()
now both
grep()
arguments ignore.case
,
perl
, fixed
, and useBytes
,
andgrep()
, enabling more flexible
matching of row and column names.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.rowtype()
and
coltype()
behavior in
matrixproduct_byname()
.column
argument on
vec_from_store_byname()
.matrix.class
in many
places.Matrix
package (1.6-2).matsbyname::Matrix
now vectorized for lists of
matrix
objects in the data
argument.vec_from_store_byname()
now always
returns a column vector.column
argument of
vec_from_store_byname()
in favor of a new
margin
argument, which is standard throughout
R
.vec_from_store_byname()
to
verify operation when multiple rows in a
match
v
.ncol_byname()
to verify
operation.matrix.class
argument. It will be removed
soon.matrix.class
argument to
matrix_class
.matrix.class
–>
matrix_class
transition.
equal_byname()
gains tol
argument to
control the precision with which equality is decided.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.aggregate_pieces_byname()
where failure
occurred if there were repeated row (or column) names not included in
the aggregation_map.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”.is.Matrix()
assists with determining
whether an object is a Matrix
. The base
functionis.matrix()
assists with determining whether an
object is a matrix
.sum_byname()
) now works with
Matrix
objects, paving the way for sparse matrix
representation throughout matsbyname
.testthat
v3.dplyr
that
caused one test to issue a deprecation warning.purrr::cross2()
.tidyselect
.transpose_byname()
no longer converts a constant into a
1x1 matrix without row or column names.select_rowcol_piece_byname()
enables
selecting rows and columns using the RCLabels
notation and
label pieces.svd_byname()
calculates singular value
decomposition of a matrix.method
on invert_byname()
allows callers to select the method for inverting a matrix.eigenvalues_byname()
and
eigenvectors_byname()
calculate eigenvalues and
eigenvectors of matrices or lists of matrices.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.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)....
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.agg_table_to_agg_map()
and
agg_map_to_agg_table()
assist with manipulating aggregation
maps.aggregation-vignette
demonstrates the new
aggregation 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.aggregate_pieces_byname()
brings the
flexibility of the RCLabels
to
matsbyname
.notation.R
that have been moved to
RCLabels
.rename_to_piece_byname()
will assist with
renaming and aggregating according to pieces of row and column
names.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.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
.RCLabels
, so the total number of tests has gone down
slightly.
preposition_notation()
,
from_notation()
, and of_notation()
.NULL
.trim_rows_cols()
eliminates rows and/or
columns in one matrix based on another.hatize_byname()
now allows a missing keep
argument, eliminating a regression in reverse dependency with the
matsindf
package.hatize_byname()
function is now simpler.
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.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.keep_pref_suff()
keeps prefixes or
suffixes of individual strings or lists of strings, based on the
notation
provided.split_pref_suff()
. Previously,
NULL
was returned for a missing prefix or suffix. Now, an
empty string (""
) is returned.split_pref_suff()
works in a data
frame.kvec_from_template_byname()
that creates a
row or column vector from a template matrix.create_colvec_byname()
builds on
create_matrix_byname()
.create_rowvec_byname()
builds on
create_matrix_byname()
.create_matrix_byname()
that behaves much
like matrix()
with “byname” characteristics.https://
where appropriate.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.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.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.stringi
.tol
argument to clean_byname()
,
allowing for machine precision issues to be addressed.rename_to_pref_suff_byname()
,
aggregate_byname()
, and
aggregate_to_pref_suff_byname()
respect notation when using
notation to renaming 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()
.README.md
requiring a nonempty <title>
element.prep_vector_arg()
to duplicate matrices when
present as the vector_arg.sort_rows_cols()
. Now telling
which row or column names are duplicates.aggregate_pref_suff_byname()
that
combines rename_to_pref_suff_byname()
and
aggregate_byname()
.aggregate_byname()
collapsed all rows or columns into a
single row or single column or both.aggregate_byname()
which aggregates
rows, columns, or both, according to an aggregation_map
. I
wanted to add this function for a long time, and I finally found a
reason, namely the need to aggregate by prefixes or suffixes in the
IEATools
package. Furthermore, the
aggregation_map
idea seems to be solid. Note that
aggregation_map = NULL
(the default) aggregates rows with
same names and columns with same names.rename_rowcol_to_pref_suff_byname()
which renames rows or columns to prefixes or suffixes in row and column
names.clean_byname()
which caused a
NULL
response when unnamed rows or columns were
present.prepare_.FUNdots()
function in all
*apply_byname()
functions.unaryapply_byname()
into
function prepare_.FUNdots()
, so it can be used in other
*apply_byname()
functions.unaryapply_byname()
, which was not
correctly handling a rectangular two-dimensional list of arguments to
FUN
supplied in .FUNdots
. A rectangular
two-dimensional list of arguments in .FUNdots
is now
interpreted as follows:
FUN
.a
..FUNdots
is the number
of arguments supplied to FUN
. The length of the second
dimension of .FUNdots
must be equal to the length of
a
.dplyr
1.0.0. Several tests
and examples in matsbyname
needed a column of a data frame
constructed with I()
. dplyr::group_by()
now
requires all groups to have same type, but that wasn’t true in some
tests, as some entries were I<list>
(items in groups
with more than one member) and others were list
(items in
single-item groups). The solution was to modify two test to
data.frame
to tibble
when
creating the data frames for testing andI()
, as tibble is friendly to list
columns.matricize_byname()
that converts a
column (or row) vector into a matrix. matricize_byname()
is
the inverse of vectorize_byname()
.vectorize_byname
that converts a
matrix into a column vector.matsindf
. This section
could be re-added now that matsindf
is now on CRAN.matrix
objects now inherit from both matrix
and
array
. Thus, code should no longer assume that
class(A)
returns an object of length 1 when A
is a matrix
. So, I eliminated all instances of
class(A) == "matrix"
in if
statements in favor
of inherits(A, "matrix")
. See
https://developer.r-project.org/Blog/public/2019/11/09/when-you-think-class.-think-again/index.html
for more details.citation("matsbyname")
now gives
useful information.matrixproduct_byname
in which row and
column types were not set correctly when one operand was a
matrix
and the other operand was NA
.elementapply_byname()
applies a function
to an element of a matrix specified by row
and
col
arguments.elementproduct_byname()
changed to
hadamardproduct_byname()
to avoid name collision with
elementapply_byname()
.elementquotient_byname()
changed to
quotient_byname()
.elementpow_byname()
changed to
pow_byname()
.elementexp_byname()
changed to
exp_byname()
.complete_rows_cols()
is now agnostic about the order of
columns in fillrow
and the order of rows in
fillcol
.sort_rows_cols()
now allows entries in roworder and
colorder that are not presently names of rows or columns. Extraneous
names are silently ignored.fractionize_byname()
now correctly handles non-square
matrices.hatinv_byname()
now handles 0
values in
input vectors gracefully. By default, 0
values become
.Machine$double.xmax
.inf_becomes
to a numerical value. To suppress default behavior, set
inf_becomes = NULL
.iszero_byname()
now checks if values of
abs(a)
are <= tol
. (Previously,
iszero_byname()
tested with < tol
.) This
change allows the zero matrix to pass the test when
tol = 0
, as we would want.equal_byname()
to use
isTRUE(all.equal())
when checking for equality.identical_byname()
checks for exact
equality using identical
.identical()
instead of
isTRUE(all.equal())
for equal_byname()
function.hatinv_byname()
.count_*
functions.mc.cores
arguments to matsbyname
functions.matbyname
. Not sure if I want to
keep it.all_byname()
and
any_byname()
make logical tests easy.replaceNaN_byname()
replaces
NaN
entries with a value (default is 0).*col*_byname
functions to call their
respective *row*_byname
functions with a transposed
argument, thereby simplifying code.select_cols_byname
, a NULL
result terminated
the executing thread.replaceNaNWith0
.count_vals_byname
,
count_vals_inrows_byname
, and
count_vals_incols_byname
that return the number of matrix
entries that meet a criterion for the entire matrix, in each row, and in
each column, respectively.*_byname
functions.
set_mc_cores
and
get_mc_cores
to set and get package-wide
mc.cores
variable. Default is 1
, so all
functions work as previously unless mc.cores
is more than
1
.mc.cores
argument of any
function to specify the number of cores to be used for an individual
calculation. Default is get_mc_cores()
. A useful approach
is to set_mc_cores(detectCores(logical = FALSE))
.sum_byname(list(1,2,3,4), list(1,2,3,4), mc.cores = 4)
to send each sum to a different core.set_mc_cores(4L); sum_byname(list(1,2,3,4), list(1,2,3,4), mc.cores = 4); set_mc_cores(1L)
to do the same thing and set the package-wide value back to
1
.*apply_byname
functions enable API improvements
naryapply_byname
: enables ...
argumentsnaryapplylogical_byname
: enables logical functions...
arguments for functions that deserve them....
arguments including
sum_byname
matrixproduct_byname
elementproduct_byname
mean_byname
geometricmean_byname
equal_byname
samestructure_byname
and_byname(...)
function that provides logical and
“by name.”
or_byname
, xor_byname
, and
not_byname
.matsindf
. Doing
so allows matsbyname
to be submitted first to CRAN. Also,
Travis builds are now successful, having eliminated the circular
dependence between matsbyname
and
matsindf
.elementpow_byname
raises all elements of a
matrix to a power.complete_rows_cols
now accepts fillrow
and
fillcol
arguments. These arguments can be used (instead of
the fill
argument) to specify the values of filled rows and
columns when completing a matrix. When conflicts arise, precedence among
the fill*
arguments is fillrow
then
fillcol
then fill
.matsbyname
.*apply_byname
functions.applybyname
vignette.unaryapply_byname
and binaryapply_byname
now have .FUNdots
arguments through which arguments to
FUN
should be passed. Use of the ...
argument
is no longer possible. ...
is reserved for future changes
to allow an unlimited number of arguments to some functions, such as
sum_byname
..FUNdots
argument fixed a bug
where calculations were incorrect when lists of matrices were stored in
cells of a data frame. Distribution of arguments (such as
margin = c(1, 2)
) across rows of a data frame was not
happening properly.cumsum_byname
,
cumprod_byname
, and cumapply_byname
.elementlog_byname
and
elementexp_byname
.unaryapply_byname
and
binaryapply_byname
. These functions have a FUN
argument that allows an arbitrary function to be applied
_byname
to matrices or data frames containing matrices.
unaryapply_byname
is for unary functions such as
rowsums_byname
.binaryapply_byname
is for binary functions such as
sum_byname
.unaryapply_byname
and binaryapply_byname
are used by all _byname
functions internally.unaryapply
and
binaryapply
functions are very solid._byname
functions when one argument was a list and the
other was a non-constant numeric vector.complete_rows_cols_byname
. It no longer
takes a names
argument.mean_byname
: returns the arithmetic mean of
corresponding entries of two matricesgeometricmean_byname
: returns the geometric mean of
corresponding entries of two matriceslogarithmicmean_byname
: returns the logarithmic mean of
corresponding entries of two matricessetrownames_byname
and
setcolnames_byname
on a constant would fail. It now
produces a 1x1 matrix with named rows or columns.rowprod_byname
: returns a column vector with row
products (product of all entries in a row)colprod_byname
: returns a row vector with column
products (product of all entries in a column)prodall_byname
: returns a numeric of the product of all
entries in a matrixInitial version.