symmetrize | R Documentation |
(De)symmetrize square binary matrix in various ways.
symmetrize(mat, rule = c("upper", "lower", "div", "intdiv"))
mat |
square numeric matrix |
rule |
character, direction of copying, see Details |
Argument mat
is to be a square numeric matrix. The way it is made
symmetric, or asymetric, depends on the value of the rule
argument.
If rule
is "upper" or "lower" then mat
is made symmetric by copying,
respectively, upper triangle onto lower, or lower onto upper. The value of
rule
specifies values of which triangle will stay in the returned value.
If rule
is "intdiv" then the off-diagonal values are distributed
approximately equally between the lower/upper triangles. If r
is the
computed result, then r[i,j]
will be equal to
(x[i,j] + x[j,i]) \%/\% 2
if r[i,j]
is in the lower triangle.
It will be equal to
(x[i,j] + x[j,i]) \%/\% 2 + 1
if in the upper triangle.
If rule
is "div" then the off-diagonal values are distributed equally
between the lower/upper triangles: as with "intdiv" but using normal
/
division.
A matrix: symmetrized version of mat
.
fold()
m <- matrix(1:16, 4, 4)
# copy upper triangle onto lower symmetrically
symmetrize(m, "upper")
# copy lower triangle onto upper symmetrically
symmetrize(m, "lower")
# distribute off-diagonal values exactly
# r[i,j] = (m[i,j] + m[j,i]) / 2
r1 <- symmetrize(m, "div")
r1
all.equal(sum(m), sum(r1))
# distribute off-diagonal values using integer division
r2 <- symmetrize(m, "intdiv")
r2
all.equal(sum(m), sum(r2))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.