R: Force a Matrix to 'symmetricMatrix' Without Symmetry Checks

forceSymmetric {Matrix} | R Documentation

## Force a Matrix to 'symmetricMatrix' Without Symmetry Checks

### Description

Force a square matrix `x` to a `symmetricMatrix`, without a symmetry check as it would be applied for `as(x, "symmetricMatrix")`.

### Usage

    forceSymmetric(x, uplo)

### Arguments

`x` | any square matrix (of numbers), either “"traditional"” (`matrix`) or inheriting from `Matrix`.
`uplo` | optional string, `"U"` or `"L"` indicating which “triangle” half of `x` should determine the result. The default is `"U"` unless `x` already has a `uplo` slot (i.e., when it is `symmetricMatrix`, or `triangularMatrix`), where the default will be `x@uplo`.

### Value

a square matrix inheriting from class `symmetricMatrix`.

### See Also

`symmpart` for the symmetric part of a matrix, or the coercions `as(x, <symmetricMatrix class>)`.

### Examples

     ## Hilbert matrix
     i <- 1:6
     h6 <- 1/outer(i - 1L, i, "+")
     sd <- sqrt(diag(h6))
     hh <- t(h6/sd)/sd # theoretically symmetric
     isSymmetric(hh, tol=0) # FALSE; hence
     try( as(hh, "symmetricMatrix") ) # fails, but this works fine:
     H6 <- forceSymmetric(hh)

     ## result can be pretty surprising:
     (M <- Matrix(1:36, 6))
     forceSymmetric(M) # symmetric, hence very different in lower triangle
     (tm <- tril(M))
     forceSymmetric(tm)

[Package Matrix version 1.4-1 Index]