# QR.Auxiliaries

##### Reconstruct the Q, R, or X Matrices from a QR Object

Returns the original matrix from which the object was constructed or the components of the decomposition.

##### Usage

```
qr.X(qr, complete = FALSE, ncol =)
qr.Q(qr, complete = FALSE, Dvec =)
qr.R(qr, complete = FALSE)
```

##### Arguments

- qr
- object representing a QR decomposition. This will
typically have come from a previous call to
`qr`

or`lsfit`

. - complete
- logical expression of length 1. Indicates whether an arbitrary orthogonal completion of the $\bold{Q}$ or $\bold{X}$ matrices is to be made, or whether the $\bold{R}$ matrix is to be completed by binding zero-value rows beneath the square upper triangle.
- ncol
- integer in the range
`1:nrow(qr$qr)`

. The number of columns to be in the reconstructed $\bold{X}$. The default when`complete`

is`FALSE`

is the first`min(ncol(X), nrow(X))`

columns of the original $\bold{X}$ from which the qr object was constructed. The default when`complete`

is`TRUE`

is a square matrix with the original $\bold{X}$ in the first`ncol(X)`

columns and an arbitrary orthogonal completion (unitary completion in the complex case) in the remaining columns. - Dvec
- vector (not matrix) of diagonal values. Each column of
the returned $\bold{Q}$ will be multiplied by the corresponding
diagonal value. Defaults to all
`1`

s.

##### Value

`qr.X`

returns $\bold{X}$, the original matrix from
which the qr object was constructed, provided ```
ncol(X) <= nrow(x)<="" code="">.
If
````complete`

is `TRUE`

or the argument `ncol`

is greater than
`ncol(X)`

, additional columns from an arbitrary orthogonal
(unitary) completion of `X`

are returned.`qr.Q`

returns part or all of **Q**, the order-nrow(X)
orthogonal (unitary) transformation represented by `qr`

. If
`complete`

is `TRUE`

, **Q** has `nrow(X)`

columns.
If `complete`

is `FALSE`

, **Q** has `ncol(X)`

columns. When `Dvec`

is specified, each column of **Q** is
multiplied by the corresponding value in `Dvec`

.Note that `qr.Q(qr, *)`

is a special case of
`qr.qy(qr, y)`

(with a “diagonal” `y`

), and
`qr.X(qr, *)`

is basically `qr.qy(qr, R)`

(apart from
pivoting and `dimnames`

setting).`qr.R`

returns **R**. This may be pivoted, e.g., if
`a <- qr(x)`

then `x[, a$pivot]`

= **QR**. The number of
rows of **R** is either `nrow(X)`

or `ncol(X)`

(and may
depend on whether `complete`

is `TRUE`

or `FALSE`

).

##### See Also

##### Examples

`library(base)`

```
p <- ncol(x <- LifeCycleSavings[, -1]) # not the 'sr'
qrstr <- qr(x) # dim(x) == c(n,p)
qrstr $ rank # = 4 = p
Q <- qr.Q(qrstr) # dim(Q) == dim(x)
R <- qr.R(qrstr) # dim(R) == ncol(x)
X <- qr.X(qrstr) # X == x
range(X - as.matrix(x)) # ~ < 6e-12
## X == Q %*% R if there has been no pivoting, as here:
all.equal(unname(X),
unname(Q %*% R))
# example of pivoting
x <- cbind(int = 1,
b1 = rep(1:0, each = 3), b2 = rep(0:1, each = 3),
c1 = rep(c(1,0,0), 2), c2 = rep(c(0,1,0), 2), c3 = rep(c(0,0,1),2))
x # is singular, columns "b2" and "c3" are "extra"
a <- qr(x)
zapsmall(qr.R(a)) # columns are int b1 c1 c2 b2 c3
a$pivot
pivI <- sort.list(a$pivot) # the inverse permutation
all.equal (x, qr.Q(a) %*% qr.R(a)) # no, no
stopifnot(
all.equal(x[, a$pivot], qr.Q(a) %*% qr.R(a)), # TRUE
all.equal(x , qr.Q(a) %*% qr.R(a)[, pivI])) # TRUE too!
```

*Documentation reproduced from package base, version 3.3.0, License: Part of R 3.3.0*

### Community examples

Looks like there are no examples yet.