Solvers for Large-Scale Eigenvalue and SVD Problems

R interface to the 'Spectra' library <> for large-scale eigenvalue and SVD problems. It is typically used to compute a few eigenvalues/vectors of an n by n matrix, e.g., the k largest eigenvalues, which is usually more efficient than eigen() if k << n. This package provides the 'eigs()' function that does the similar job as in 'Matlab', 'Octave', 'Python SciPy' and 'Julia'. It also provides the 'svds()' function to calculate the largest k singular values and corresponding singular vectors of a real matrix. The matrix to be computed on can be dense, sparse, or in the form of an operator defined by the user.


RSpectra is an R interface to the Spectra library. It is typically used to compute a few eigenvalues/vectors of an n by n matrix, e.g., the k largest eigen values, which is usually more efficient than eigen() if k << n.

Currently this package provides function eigs() for eigenvalue/eigenvector problems, and svds() for truncated SVD. Different matrix types in R, including sparse matrices, are supported. Below is a list of implemented ones:

  • matrix (defined in base R)
  • dgeMatrix (defined in Matrix package, for general matrices)
  • dsyMatrix (defined in Matrix package, for symmetric matrices)
  • dgCMatrix (defined in Matrix package, for column oriented sparse matrices)
  • dgRMatrix (defined in Matrix package, for row oriented sparse matrices)
  • function (implicitly specify the matrix by providing a function that calculates matrix product A %*% x)


We first generate some matrices:

n = 20
k = 5
A1 = matrix(rnorm(n^2), n)  ## class "matrix"
A2 = Matrix(A1)             ## class "dgeMatrix"

General matrices have complex eigenvalues:

eigs(A1, k)
eigs(A2, k, opts = list(retvec = FALSE))  ## eigenvalues only

RSpectra also works on sparse matrices:

A1[sample(n^2, n^2 / 2)] = 0
A3 = as(A1, "dgCMatrix")
A4 = as(A1, "dgRMatrix")
eigs(A3, k)
eigs(A4, k)

Function interface is also supported:

f = function(x, args)
    as.numeric(args %*% x)
eigs(f, k, n = n, args = A3)

Symmetric matrices have real eigenvalues.

A5 = crossprod(A1)
eigs_sym(A5, k)

To find the smallest (in absolute value) k eigenvalues of A5, we have two approaches:

eigs_sym(A5, k, which = "SM")
eigs_sym(A5, k, sigma = 0)

The results should be the same, but the latter method is far more stable on large matrices.

For SVD problems, you can specify the number of singular values (k), number of left singular vectors (nu) and number of right singular vectors(nv).

m = 100
n = 20
k = 5
A = matrix(rnorm(m * n), m)
svds(A, k)
svds(t(A), k, nu = 0, nv = 3)

Similar to eigs(), svds() supports sparse matrices:

A[sample(m * n, m * n / 2)] = 0
Asp1 = as(A, "dgCMatrix")
Asp2 = as(A, "dgRMatrix")
svds(Asp1, k)
svds(Asp2, k, nu = 0, nv = 0)

and function interface

f = function(x, args)
    as.numeric(args %*% x)
g = function(x, args)
    as.numeric(crossprod(args, x))
svds(f, k, Atrans = g, dim = c(m, n), args = Asp1)


Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.16-0 by Yixuan Qiu, 2 years ago

Report a bug at

Browse source code at

Authors: Yixuan Qiu [aut, cre] , Jiali Mei [aut] (Function interface of matrix operation) , Gael Guennebaud [ctb] (Eigenvalue solvers from the 'Eigen' library) , Jitse Niesen [ctb] (Eigenvalue solvers from the 'Eigen' library)

Documentation:   PDF Manual  

Task views: Numerical Mathematics

MPL (>= 2) license

Imports Matrix, Rcpp

Suggests knitr, rmarkdown, prettydoc

Linking to Rcpp, RcppEigen

Imported by ClimMobTools, Gmedian, HCD, HyperG, LSX, MatrixCorrelation, NetworkDistance, NetworkReg, PlackettLuce, RMLPCA, Rdimtools, SISIR, ScorePlus, SplitKnockoff, SuperPCA, TopicScore, WSGeometry, bcTSNE, bigstatsr, bigutilsr, blapsr, castor, cvCovEst, ddpca, dtwclust, epca, fastLaplace, fastRG, filling, funcharts, fungible, fuser, gasper, greed, gsbm, hmlasso, knockoff, kpcalg, lfmm, locStra, maotai, markerpen, miRNAss, motifcluster, multiblock, pcadapt, polyreg, quanteda.textmodels, rARPACK, rags2ridges, rainette, randnet, scTenifoldKnk, scTenifoldNet, smartsnp, sparseLRMatrix, spflow, textmineR, umap, uwot.

Depended on by RUVIIIC, SmartSVA, fad, onlinePCA.

Suggested by BiplotML, Rssa, bigsnpr, butcher, dimRed, ggmix, hydra, recipes, redist, spaMM, spatialreg, spdep.

Linked to by autoFRK.

See at CRAN