R/CompletingMatrices.R
complete_rows_cols.Rd
"Completing" rows and columns means that a
contains a union of rows and columns
between a
and m
,
with missing data represented by the value for fill
(0, by default).
complete_rows_cols( a = NULL, mat = NULL, fill = 0, fillrow = NULL, fillcol = NULL, margin = c(1, 2) )
a | a matrix or list of matrices to be completed. |
---|---|
mat | a |
fill | rows and columns added to |
fillrow | a row vector of type |
fillcol | a column vector of type |
margin | specifies the subscript(s) in |
A modified version of a
possibly containing additional rows and columns
whose names are obtained from matrix
Note that complete_rows_cols(mat1, mat2)
and complete_rows_cols(mat2, mat1)
are
not guaranteed to have the same order for rows and columns.
(Nor are the values in the matrix guaranteed to have the same positions.)
If dimnames(mat)
is NULL, a
is returned unmodified.
If either a
or matrix
are missing names on a margin (row or column),
an error is given.
Matrices can be completed relative to themselves,
meaning that a
will be made square,
containing the union of row and column names from a
itself.
All added rows and columns will be created from one of the fill*
arguments.
When conflicts arise, precedence among the fill*
arguments is
fillrow
then fillcol
then fill
.
Self-completion occurs if a
is non-NULL and
both is.null(matrix)
and is.null(names)
.
Under these conditions, no warning is given.
If is.null(names)
and dimnames of matrix
cannot be determined
(because, for example, matrix
doesn't have any dimnames),
a
is completed relative to itself and a warning is given.
m1 <- matrix(c(1:6), nrow=3, dimnames = list(c("r1", "r2", "r3"), c("c1", "c2"))) m2 <- matrix(c(7:12), ncol=3, dimnames = list(c("r2", "r3"), c("c2", "c3", "c4"))) complete_rows_cols(m1, m2) # Adds empty column c4#> c1 c2 c3 c4 #> r1 1 4 0 0 #> r2 2 5 0 0 #> r3 3 6 0 0#> c1 c2 r2 r3 #> r1 1 4 0 0 #> r2 2 5 0 0 #> r3 3 6 0 0 #> c2 0 0 0 0 #> c3 0 0 0 0 #> c4 0 0 0 0complete_rows_cols(m1, m2, margin = 1) # No changes because r2 and r3 already present in m1#> c1 c2 #> r1 1 4 #> r2 2 5 #> r3 3 6complete_rows_cols(m1, m2, margin = 2) # Adds empty columns c3 and c4#> c1 c2 c3 c4 #> r1 1 4 0 0 #> r2 2 5 0 0 #> r3 3 6 0 0#> c1 c2 #> r1 1 4 #> r2 2 5 #> r3 3 6 #> c2 0 0 #> c3 0 0 #> c4 0 0complete_rows_cols(m1, m2, fill = 100) # Adds columns c3 and c4 with 100's#> c1 c2 c3 c4 #> r1 1 4 100 100 #> r2 2 5 100 100 #> r3 3 6 100 100complete_rows_cols(m1, m1) # Nothing added, because everything already present#> c1 c2 #> r1 1 4 #> r2 2 5 #> r3 3 6#> c1 c2 r1 r2 r3 #> r1 1 4 0 0 0 #> r2 2 5 0 0 0 #> r3 3 6 0 0 0 #> c1 0 0 0 0 0 #> c2 0 0 0 0 0# Same as previous. With missing matrix, complete relative to transpose of m1. complete_rows_cols(m1)#> c1 c2 r1 r2 r3 #> r1 1 4 0 0 0 #> r2 2 5 0 0 0 #> r3 3 6 0 0 0 #> c1 0 0 0 0 0 #> c2 0 0 0 0 0# Adds rows r10, r11; cols c10, c11 complete_rows_cols(m1, matrix(0, nrow = 2, ncol = 2, dimnames = list(c("r10", "r11"), c("c10", "c11"))))#> c1 c2 c10 c11 #> r1 1 4 0 0 #> r2 2 5 0 0 #> r3 3 6 0 0 #> r10 0 0 0 0 #> r11 0 0 0 0#> [[1]] #> c1 c2 r1 r2 r3 #> r1 1 4 0 0 0 #> r2 2 5 0 0 0 #> r3 3 6 0 0 0 #> c1 0 0 0 0 0 #> c2 0 0 0 0 0 #> #> [[2]] #> c1 c2 r1 r2 r3 #> r1 1 4 0 0 0 #> r2 2 5 0 0 0 #> r3 3 6 0 0 0 #> c1 0 0 0 0 0 #> c2 0 0 0 0 0 #>#> [[1]] #> c1 c2 #> r1 1 4 #> r2 2 5 #> r3 3 6 #> #> [[2]] #> c1 c2 c3 c4 #> r1 1 4 0 0 #> r2 2 5 0 0 #> r3 3 6 0 0 #># No changes because r2, r3 already present in m1 complete_rows_cols(a = list(m1,m1), mat = list(m2,m2), margin = 1)#> [[1]] #> c1 c2 #> r1 1 4 #> r2 2 5 #> r3 3 6 #> #> [[2]] #> c1 c2 #> r1 1 4 #> r2 2 5 #> r3 3 6 #>#> [[1]] #> c1 c2 c3 c4 #> r1 1 4 0 0 #> r2 2 5 0 0 #> r3 3 6 0 0 #> #> [[2]] #> c1 c2 c3 c4 #> r1 1 4 0 0 #> r2 2 5 0 0 #> r3 3 6 0 0 #>complete_rows_cols(a = list(m1,m1), mat = make_list(matrix(0, nrow = 2, ncol = 2, dimnames = list(c("r10", "r11"), c("c10", "c11"))), n = 2, lenx = 1))#> [[1]] #> c1 c2 #> r1 1 4 #> r2 2 5 #> r3 3 6 #> r10 0 0 #> r11 0 0 #> #> [[2]] #> c1 c2 c10 c11 #> r1 1 4 0 0 #> r2 2 5 0 0 #> r3 3 6 0 0 #># fillrow or fillcol can be specified a <- matrix(c(11, 12, 21, 22), byrow = TRUE, nrow = 2, ncol = 2, dimnames = list(c("r1", "r2"), c("c1", "c2"))) b <- matrix(c(1:6), byrow = TRUE, nrow = 3, ncol = 2, dimnames = list(c("r1", "r2", "r3"), c("c1", "c2"))) fillrow <- matrix(c(31, 32), byrow = TRUE, nrow = 1, ncol = 2, dimnames = list("r42", c("c1", "c2"))) complete_rows_cols(a = a, mat = b, fillrow = fillrow)#> c1 c2 #> r1 11 12 #> r2 21 22 #> r3 31 32