# R Interface

### The RSpectra Package

RSpectra is the R interface of Spectra. It provides functions eigs() and eigs_sym() for eigenvalue problems, and svds() for truncated (partial) SVD. These functions are generic, meaning that 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)

### Quick Examples

#### Eigenvalue Problems

We first generate some matrices:

library(RSpectra)
library(Matrix)
n = 20
k = 5

set.seed(111)
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 preferred, since it is much more stable on large matrices.

#### SVD Problems

For SVD problems, users can 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
set.seed(111)
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)

### Reference

The function-by-function reference can be found in this manual and in the built-in help system of R by typing ?RSpectra::eigs and ?RSpectra::svds