
Returns the original matrix from which the object was constructed or the components of the decomposition.
qr.X(qr, complete = FALSE, ncol =)
qr.Q(qr, complete = FALSE, Dvec =)
qr.R(qr, complete = FALSE)
logical expression of length 1. Indicates whether an
arbitrary orthogonal completion of the
integer in the range 1:nrow(qr$qr)
. The number
of columns to be in the reconstructed complete
is FALSE
is the first
min(ncol(X), nrow(X))
columns of the original complete
is TRUE
is a square matrix with the original
ncol(X)
columns and an arbitrary
orthogonal completion (unitary completion in the complex case) in
the remaining columns.
vector (not matrix) of diagonal values. Each column of
the returned 1
s.
qr.X
returns ncol(X) <= nrow(X)
.
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
).
# NOT RUN {
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!
# }
Run the code above in your browser using DataLab