NEWS | R Documentation |
rankMatrix()
tweaks for the singular values based methods,
notably method = "maybeGrad"
.
as(new("dtCMatrix", diag="U"), "matrix")
now works, as
C-level diagU2N()
now also works for 0-dimensional triangular
matrices; this also fixes a subsetting (“indexing”) bug of
such 0-dimensional matrices, thanks to a report by Aaron Lun.
logical subsetting of 0-dim. (diagonal/triangular) matrices fixes.
The new FCONE
macros added for newer Fortran/C compiler
combinations are now defined back compatibly with R >= 3.6.0.
chol(<diagonal dt[CRT]Matrix>)
now works.
‘rchk’: fix potentially unPROTECT
ed vars in
‘src/dsyMatrix.c’
rankMatrix(<dense>, method="qr.R")
no longer assumes
non-negative diagonal entries of the R matrix.
Matrix(*, doDiag=TRUE)
where doDiag=TRUE
has
always been the default is now obeyed also in the sparse
case, as all "diagonalMatrix"
are also "sparseMatrix"
.
Matrix(0, 3,3)
returns a "ddiMatrix"
instead of a
"dsCMatrix"
previously. The latter is still returned from
Matrix(0, 3,3, doDiag=FALSE)
, and e.g., .symDiagonal(3,pi)
.
Also a triangular matrix, e.g., "dtrMatrix"
is detected now in
cases with NA
s.
This is both a bug fix and an API change which breaks code
that assumes Matrix(.)
to return a "CsparseMatrix"
in
cases where it now returns a "diagonalMatrix"
(which does
extend "sparseMatrix"
).
Subassignment to "diagonalMatrix"
now returns
sparse "triangularMatrix"
more often; also (sparse)
"symmetricMatrix"
.
nearPD()
gets new option: If base.matrix = TRUE
,
the resulting mat
component is a base matrix
, as
often used desired when nearPD()
is used outside the
Matrix package context.
Factored out new qr2rankMatrix()
utility from
rankMatrix()
.
New BunchKaufman(<matrix>)
method.
Added wrld_1deg
sparse matrix example to
distributed version of Matrix (no longer excluding it
via ‘.Rbuildignore’).
New (simple) mat2triplet()
function to be used instead
of summary(<sparseMatrix>)
in code.
Internal .diag2tT()
gains new option drop0 = TRUE
and hence now by default drops zero diagonal entries. Consequently,
e.g., as(<diagonalMatrix>, "CsparseMatrix")
now drops such
zeros, too.
Updated the crucial underlying C libraries from SuiteSparse,
from 4.2.1 to 5.7.1 (from 2020-02-20), visible in .SuiteSparse_version()
.
sparseMatrix()
gets new argument repr = "C"
,
superseding the (now deprecated) giveCsparse = TRUE
. Allows
to return "RsparseMatrix"
matrices.
Similarly, rsparsematrix()
, fac2sparse()
and fac2Sparse()
get the new repr
argument and their giveCsparse
is
deprecated, sometimes only informally for now.
sparse.model.matrix()
gets option sep = ""
, with,
e.g., sep = ":"
allowing to get easier column names; from
R-forge Matrix (non-)bug #6581, by Vitalie Spinu.
rankMatrix(<sparse>, method="qr")
now returns NA
(or NaN
) instead of signalling an error in the case the sparse
Q R decomposition gave NA
s in diag(R)
.
Coercion (as(., .)
) from e.g., "lsyMatrix"
to
"CsparseMatrix"
silently made asymmetric dimnames symmetric,
as did the internal forceCspSymmetric(*, dimNames)
which may be called from forceSymmetric()
.
Adapt code to new Fortran requirements of passing length of character arguments, thanks to Brian Ripley.
(R-forge Matrix bug #6659, reported by Georg Kindermann):
<sparseVector>[i] <- val
bug fixed.
(R-forge Matrix bug #6666, reported by Ezra Tucker):
which(<ldiMatrix>, array.ind=TRUE)
thinko fixed.
For R-devel Dec 4, 2020: adapt all.equal() check of sparse matrix images (which contain panel functions with environments ..).
tried fixing warning 'cholmod_factorize_p' accessing 16 bytes in a region of size 8 [-Wstringop-overflow=] in ‘src/dsCMatrix.c’ (in two places); seen by pre-release-gcc11 compilation.
Fix last(?) PROTECT()
warning found by rchk
in
‘src/dense.c’'s ddense_skewpart()
.
as(m, "dgTMatrix")
does not lose dimnames
anymore
when m
is a (traditional) matrix
.
M[logical(0), ]
now has dimension 0 x k for sparse
M
as for base matrices.
log(M, base)
(the 2-argument version of log()
)
wrongly gave the result for base = exp(1)
, i.e., the 1-argument default.
‘test-tools-Matrix.R’: Qidentical()
no longer assumes
class(<matrix>)
to be of length 1.
‘test-tools-1.R’: provide bug-fixed canCoerce()
in
old R versions.
(none)
Fix new PROTECT()
warnings (bugs?) found by rchk
.
Provide isFALSE()
for R < 3.5.0 as now need it for
sparseMatrix printing.
regression tests depending on sample()
now are future
proof reproducible, via RNGversion(.)
.
give information about #rows and #columns that are suppressed in print()ing if the matrix is larger than 'max.print'.
data(<Matrix-data>)
no longer attaches Matrix to
the search path.
"Ops"
group methods, i.e., "Arith", "Compare" & "Logic",
now should all work with 0-extent matrices as well, thanks to bug
reports by Aaron Lun, University of Cambridge.
when printing and formatting sparse matrices, see formatSpMatrix()
,
the maxp
option, e.g., from getOption("max.print")
, is
“rounded up” to 100, as very small values are very rarely appropriate.
image()
gets new optional argument border.color
.
image(Matrix(0, n,m))
now works.
German translation updates.
one more PROTECT()
.
Faster as(<matrix>, "sparseMatrix")
and coercion
"dgCMatrix"
, "ngCMatrix"
, etc, via new direct C
matrix_to_Csparse()
which does not go via
"dgeMatrix"
. This also works for large matrices
m
, i.e., when length(m) >= .Machine$integer.max
.
Also provide low-level R functions .m2dgC()
,
.m2lgC()
, and .m2ngC()
for these.
cbind(NULL,<Matrix>)
no longer return NULL
;
analogously for rbind()
, rbind2()
, cbind2()
,
fixing very long standing typo in the corresponsing cbind2()
and rbind2()
methods.
The deprecation warning (once per session) for
cBind()
and rBind()
finally works (fixing a simple thinko).
cbind()
and rbind()
for largish sparse
matrices no longer gives an error because of integer overflow
(in the default case where sparse
is not been specified
hence is chosen by a nnzero()
based heuristic).
.symDiagonal(5, 5:1)
and .trDiagonal(x = 4:1)
now work as expected.
Sp[i]
now is much more efficient for large sparse
matrices Sp
, notably when the result is short.
<sparseVector>[ <negative integer> ]
now also gives
the correct answer when the result is “empty”, i.e., all
zero or false.
large "dspMatrix"
and "dtpMatrix"
objects can
now be constructed via new(*, Dim = *, x = *)
also when
length(x)
is larger than 2^31 (as the C internal
validation method no longer suffers from integer overflow).
More PROTECT()ing to be “rather safe than sorry” thanks to Tomas Kalibera's check tools.
crossprod(x,y)
and kronecker(x,y)
have become
considerably more efficient for large "indMatrix"
objects
x, y
, thanks to private nudging by Boris Vaillant.
(R-forge Matrix bug #6185): c < 0
now also works for
derived sparse Matrices (which only contain Matrix
classes); via improving hidden MatrixClass()
. Part of
such derived matrices only work in R >= 3.5.0.
using Authors@R
in ‘../DESCRIPTION’ to list all
contributors.
solve(-m)
no longer should use a cached Cholesky
factorization (of m
).
S4 method dispatch no longer emits ambiguity
notes (by default) for everybody, apart from the package
maintainer. You can reactivate them by
options(Matrix.ambiguityNotes = TRUE)
rankMatrix(<matrix of all 0>)
now gives zero for all
methods, as it should be.
no longer calling length(NULL) <- <positive>
which
has been deprecated in R-devel since July.
qr.coef(<sparseQR>, y)
now finally has correct (row)
names (from pivot back permutation).
.trDiagonal()
utility is now exported.
quite a collection of new PROTECT(.)
's thanks to
Tomas Kalibera's ‘rprotect’ analysis.
"Ops"
between "table", "xtabs", and our matrices now work.
as(matrix(diag(3), 3, dimnames=rep(list(c("A","b","c")),2)),
"diagonalMatrix")@x
is no longer named.
norm(x, "2")
now works as well (and equivalently to base::norm
).
sparseVector()
now also works without x
argument.
c.sparseVector()
method for c()
of
sparseVectors (and available as regular function on purpose).
as(Diagonal(3), "denseMatrix")
no longer returns a
non-dense "ddiMatrix"
.
S[sel,] <- value
and similar no longer segfault, but
give a "not (yet?) supported"
error
for sparse matrices S
and logical sel
when
sel
contains NA
s.
The same error (instead of a low-level one) is signalled for
indexing (with NA-containing logical sel
), i.e.,
S[sel,]
.
which(x, arr.ind=TRUE, *)
(when x
is a
"lMatrix"
or "nMatrix"
) now works the same as
base::which
, obeying an optional useNames
argument
which defaults to TRUE
. Previously, the resulting
two-column matrix typically had empty dimnames
.
0-length matrix "Ops"
(binary operations) are now
compatible to R-devel (to be R 3.4.0).
C-API: SuiteSparse_long
is now defined as
int64_t
on all platforms, and we now include (C99) ‘inttypes.h’
x[.] <- value
now also works for
"sparseVector"
's, both as x
and as value
.
x[FALSE] <- value
now also works for "sparseVector"
's.
rep(x, *)
now works for "sparseVector"
s and
sparse and dense "Matrix"
-classed matrices x
.
solve(<sparse_LU>)
no gives an error in some cases of
singular matrices, where before the C code accessed illegal memory locations.
in C code, protect _POSIX_C_SOURCE by #ifdef __GLIBC__
cBind()
and rBind()
have been almost silently
deprecated in R >= 3.2.0
and now give a warning,
“once per session” only.
bandSparse(*, k=k, *)
now returns matrices inheriting from
"triangularMatrix"
when obvious from the diagonal indices k
.
KhatriRao(X,Y)
now also works when X
or
Y
is completely zero.
The 0-dim. Matrix multiplication fix in 1.2-5 did trigger wrong warnings in other diagonal matrix multiplications.
isSymmetric(m)
now also works for "indMatrix"
m
.
isSymmetric(m)
is faster for large dense asymmetric matrices.
Matrix multiplications (A %*% B
) now work correctly
when one of the matrices is diagonal and the other has a zero dimension.
sparseMatrix()
gets new argument triangular
and a smarter default for dims
when symmetric
or
triangular
is true.
as(<sparse>, "denseMatrix")
now works in more cases
when prod(dim(.))
is larger than 2^{31} - 1.
Hence, e.g., !S
now works for much larger sparse matrices
S
.
creating very large dense matrices, e.g., by
as(<sparseM.>, "matrix")
would segfault (in case it could
allocate enough storage).
MatrixClass()
is exported now.
More exports of semi-internal functions (for speed, named
".<foo>"
, i.e., inofficial API), such as .solve.dgC.lu()
.
more Korean translations
Packages linking to Matrix (LinkingTo:
in ‘DESCRIPTION’) now find
alloca properly defined in ‘Matrix.h’ even for non-GNU
compilation environments such as on Solaris or AIX.
extended "n?CMatrix" classes (e.g., from setClass(.,
contains="ngCMatrix")
) now can be coerced via as(.)
to
"d.CMatrix"
.
The printing of largish sparse matrices is improved, notably
in the case where columns are suppressed, via new fitWidth =
TRUE
option in printSpMatrix2()
.
cbind2()
and rbind2()
no longer fail to
determine sparse
when it is unspecified and hence
NA
, fixing R-forge bug #6259.
Explicitly import from “base” packages such as "stats"
.
Our colSums(x)
, rowMeans(y)
, ..., methods
now “keep names”, i.e., if the result is a numeric vector,
and the matrix x
has column or row names, these become the
names(.)
of the result, fixing R-forge bug #6018.
"Matrix"
now has an initialization()
method
coercing 0-length dimnames components to NULL
and other
non-NULL
dimnames to character
. Before, e.g.,
numeric dimnames components partially worked, even though it has
always been documented that non-NULL
dimnames should be
character
.
For symmetricMatrix
objects which have symmetrical
dimnames by definition, it is allowed to only set one half of the
dimnames
to save storage, e.g., list(NULL, nms)
is
semantically equivalent to list(nms, nms)
.
as.vector(<sparseVector>)
etc, now work, too.
lu(<sparseMatrix>)
now keeps dimnames
.
better ‘NEWS.Rd’ (which pleases Kurt and tidy
;-)
S[] <- T
and S[] <- spV
now work (in more cases)
for sparse matrices S, T and sparseVector spV
.
Huge dense matrix multiplication did lead to segfaults, see R-help, “does segfault mean (always) a bug?”, May 5, 2015. Fixed by using C's Alloca() only in smallish cases.
Optional arguments in image()
, e.g., main=
<..>)
now also work for lgCMatrix
, nMatrix
etc;
thanks to a 4.5 years old report by Mstislav Elagin.
dimnames(A) <- val
now resets the factors
slot
to empty, as the factorizations now keep dimnames more often.
crossprod(<matrix>, Diagonal(<n>))
works again (and
these are tested more systematically).
Matrix products (%*%
, crossprod
, and
tcrossprod
) for "dtrMatrix"
are correct in all
cases, including keeping dimnames.
Matrix(d)
(and other coercions to "Matrix"
)
now correctly keeps dimnames
also when d
is a
traditional diagonal "matrix"
.
New %&%
for “boolean arithmetic” matrix product.
New argument boolArith = NA
in crossprod()
and
tcrossprod()
. boolArith = TRUE
now forces boolean
arithmetic, where boolArith = FALSE
forces numeric one.
Several of these products are more efficient thanks to new C
functionality based on our new chm_transpose_dense()
, and
others based on geMatrix_crossprod
,
geMatrix_matrix_mm
, etc.
Most dense matrix products, also for non-dgeMatrix
,
including "l..Matrix"
and "n..Matrix"
ones are now
directly handled by new .Call()
s.
"dMatrix"
(numeric) and "lMatrix"
(logical)
matrices can now be coerced to "nMatrix"
(non-zero pattern
or “boolean”) even when they contain NA
s, which then
become TRUE
s.
More thorough checking of cbind2()
and
rbind2()
methods, notably as they are called from cbind()
and rbind()
from R version 3.2.0 on.
rbind2(<dense>, <dense>)
is faster, being based on new C code.
symmetric Matrices (i.e., inheriting from
"symmetricMatrix"
) are allowed to have dimnames
of
the form list(NULL, <names>)
and now print correctly
and get correctly coerced to general matrices.
indMatrix
object (“index matrices”) no longer
need to be “skinny”.
rsparseMatrix()
now accepts rand.x = NULL
and
then creates a random pattern matrix
("nsparseMatrix"
).
anyDuplicatedT()
and uniqTsparse()
low level
utilities are exported now.
Partial Korean translations of messages.
For R ≥ 3.2.0, cBind()
and rBind()
are deprecated, as they are no longer needed since cbind()
and rbind()
do work automatically.
Fix some rbind2()
methods.
t()
now transposes the dimnames even for symmetric
matrices.
diag(M) <- val
did not always recycle val
to
full length, e.g., when M
was a "dtrMatrix"
.
crossprod(<indMatrix>)
was wrong in cases where the
matrix had all-zero columns.
Matrix products (%*%
, crossprod
, and
tcrossprod
) with one sparse and one dense argument now
return numeric (a "dMatrix"
) when they should, i.e.,
unless the new setting boolArith = TRUE
is applied.
More use of anyNA()
(for speedup).
Matrix products (%*%
, crossprod
,
tcrossprod
) now behave compatibly to R 3.2.0, i.e., more
lenient in matching dimensions for matrix - vector products.
isTriangular()
gets new optional argument upper = NA
.
crossprod()
and tcrossprod()
fixes for
several <diagonal> o <sparse> combinations.
rowMeans(<dgeMatrix>, na.rm=TRUE)
was wrong sometimes.
fix and speedup of coercions (as(., .)
) from and to
symmetric or triangular matrices.
invPerm()
coercion to integer
dimnames( solve(.,.) )
fix [r3036]
tril()
and triu()
now return correct uplo
.
names(dimnames(.))
now preserved, e.g. in
symmpart()
or subsetting (A[i,j]
).
new rsparsematrix()
for random sparse Matrices.
improved warnings, notably for unused arguments previously
swallowed into ...
.
crossprod(<vec>, <dsyMatrix>)
fixed.
crossprod()
and kronecker()
fixes for some
<indMatrix> cases.
%*%
and crossprod()
now also work with
sparseVector
s.
speedup of crossprod(v, <sparseM>)
, thanks to nudge
by Niels Richard Hansen.
new help page for all such matrix products (‘../man/matrix-products.Rd’).
image()
now gets correct ylim
again.
More consistent matrix products.
correct adaption to R 3.1.0
using tolerance
(and not ‘tol’) in all.equal()
export fast power-user coercion utilities
.dsy2mat()
, .dxC2mat()
, .T2Cmat()
, ..2dge()
.
matrix products now (mostly) work with sparseVector
s;
and correctly in some more cases.
Testing code's assertWarning()
adapted for R ≤ 3.0.1.
Depends: R >= 2.15.2
eases checking.
image(.., xlim, ylim)
: nicer defaults
for the axis limits, and ylim
is sorted decreasingly; not
strictly back-compatible but should never harm.
rankMatrix(*, method="qr")
now using tol
T2graph()
and graph2T()
export old functionality explicitly.
Tweaks in conversions between "graph"
and
"sparseMatrix"
objects. Notably, as(<graph>,
<Matrix>)
now more often returns a (0/1 pattern) "n..Matrix".
sparseMatrix()
: new use.last.ij
argument.
KhatriRao()
: fix rownames (X <-> Y)
qr.coef()
, qr.fitted
, and qr.resid
now
also work with sparse RHS y
.
sparse matrix “sub assignments”, e.g., M[ii] <- v
,
speedup and fixes.
bug fixes also in M[negative indices] <- value
and
<sparseMatrix>[cbind(i,j)]
.
fac2sparse
and fac2Sparse
now exported, with a
new giveCsparse
option.
Update to latest SuiteSparse
C library by Tim Davis,
U. Florida.
ensuing “C API changes”
new .SuiteSparse_version()
function
Many ‘Imports:’ instead of ‘Depends:’.
fixed long lasting undetected solve(<dsCMatrix>, *)
bug.
Our all.equal()
methods no longer sometimes return
c("TRUE", "....difference..")
.
rankMatrix(<matrix>)
: fix the internal x.dense
definition.
Revert some wrong changes to solve(<sparse>, *)
from
1.0-13 (“stop gap fix” for R 3.0.2).
New (efficient) KhatriRao()
function by Michael Cysouw
New "indMatrix"
class of “index matrices”, a
generalization of "pMatrix"
, the permutation matrices, many
methods generalized from pMatrix to indMatrix. All (initial)
functionality contributed by Fabian Scheibl, Univ. Munich.
Export and document isDiagonal()
and
isTriangular()
as they are useful outside of Matrix.
rankMatrix(M, method="qr")
no longer needs
sval
which makes it considerably more useful for large
sparse M
.
Start providing anyNA
methods for R >= 3.1.0.
solve(<sparse> a, <sparse> b)
: if a
is
symmetric, now compute sparse result.
nearPD()
gets new option conv.norm.type = "I"
.
determinant(<dpoMatrix>)
now uses chol()
, and
hence also an existing (‘cached’) Cholesky factor.
3 new C -> R
utilities (including hidden R function
.set.factors()
for caching also from R, not just in C).
M[] <- v
for unitriangular M
now correct.
lu(.)
no longer sometimes returns unsorted columns.
.
.
.
as(<csr>, "dgCMatrix")
(from package SparseM)
now works again.
.
.sparseDiagonal()
: new unitri
argument, and
more flexibility;
new solve(<dsCMatrix>, <missing>)
via efficient C code.
.
new sparseVector()
constructor function.
is.finite()
is.infinite()
now work for our
matrices and "*sparseVector" objects.
diag(.) <- V
now preserves symmetricity,
triangularity and even uni-triangularity sometimes.
Quite a few fixes for Ops
(arithmetic, logic, etc)
group methods.
Ditto for diagonalMatrix
methods.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
During Doug Bates' sabbatical in Zurich, Martin Maechler becomes co-author of the Matrix package.
Beginning of class reorganization with a more systematic naming scheme.
More (correct) coercions as(<from>, <to>)
.
lme4 / lmer specific R code moved out to lme4 package.
.
Doug Bates (only)
Sparse matrices, classes and methods, partly via
Interface to LDL, TAUCS, Metis and UMFPACK C libraries
.............................................
The first CRAN release of the Matrix package, titled “A Matrix library for R” authored by Douglas Bates (maintainer, principal author) and Saikat DebRoy.
Matrix()
constructor for R objects of class Matrix
.
Matrix.class()
returning informal subclasses such as
"Hermitian"
, "LowerTriangular"
is.Orthonormal()
, is.Hermitian()
,
is.UpperTriangular()
functions.
SVD()
, lu()
, and schur()
decomposition
generics with "Matrix"
methods.
rcond()
, norm()
, det()
;
expand()
and facmul()
.
C++ interface to LAPACK