Open statzhero opened 1 year ago
It could be a mismatch. The enum
that drives is 0-based (in fastLm.cpp
)
enum {ColPivQR_t = 0, QR_t, LLT_t, LDLT_t, SVD_t, SymmEigen_t, GESDD_t};
so that would LLT be 2 and LDLT be 3. The actualy branching is in in the static inline function do_lm()
just below. You could add a print statement to be sure... This is all code originally written by @dmbates which has stood some tests of time but it is always possibly that these two got crossed.
Is it possible that the documentation is behind? It doesn't seem to mention:
## SVD using the Lapack subroutine dgesdd and Eigen support
exprs["GESDD"] <- alist(RcppEigen::fastLmPure(mm, y, 6L))
[ NNB: You could make this easier by stating which files you take snippets from or use the GitHub feature of a link with an anchor. ]
From what I just quoted, the enum
for the GESDD method is six, this line calls with six. Seems correct to me.
Here is the link to the documentation file if you want to check.
\item{method}{an integer scalar with value 0 for the column-pivoted QR decomposition, 1 for the unpivoted QR decomposition, 2 for the LLT Cholesky, 3 for the LDLT Cholesky, 4 for the Jacobi singular value decomposition (SVD) and 5 for a method based on the eigenvalue-eigenvector decomposition of \eqn{\mathbf{X}^\prime\mathbf{X}}{X'X}. Default is zero.}
In the
lmBenchmark.R
file I readbut in the documentation for
RcppEigen::fastLm
the method is described asIs this correct?