*This error occurs when you try to use the solve() function, but the matrix you handle is a singular matrix. Singular matrices do not have an inverse.*

*The only way to solve this error is to create a matrix that is not singular.*

*This tutorial will go through the error and solve it with code examples.*

## Example

Let’s look at an example to reproduce to error. First, we will create a **3×3** matrix using the `matrix()`

function:

mat <- matrix(c(1, 1, 1, 1, 1, 1, 1, 1, 1), ncol=3, nrow=3) mat

[,1] [,2] [,3] [1,] 1 1 1 [2,] 1 1 1 [3,] 1 1 1

Let’s try to get the inverse of the matrix by using the solve function.

solve(mat)

solve(mat)Error in solve.default(mat) : Lapack routine dgesv: system is exactly singular: U[2,2] = 0

The error occurs because `mat`

is a singular matrix. It is not possible to invert a singular matrix. LAPACK is a Linear Algebra package used underneath `solve()`

. DGESV computes the solution to a real system of linear equations A * X = B.

### What is a Singular Matrix?

A singular matrix is a square matrix (same number of rows and columns) if its determinant is 0. The inverse of a matrix **A** is found using the formula **A ^{-1} = (adj A) / (det A)**, where

**det A**is the determinant of

**A**. If

**det A**

**= 0**then

**0**is in the denominator to calculate

**A**. Therefore

^{-1}**A**is not defined when

^{-1}**det A = 0**.

We can check the determinant of a matrix using the `det()`

function:

det(mat)

0

We can see that the determinant of the matrix is zero, which is why we encountered the error.

### Solution

We can solve the error by choosing a matrix that is not singular. The two ways to check if a matrix is singular are if it is a square matrix and its determinant is 0. Let’s look at the revised code:

mat <- matrix(c(1, 3, 3, 4, 12, 6, 7, 2, 9), ncol=3, nrow=3) mat

Let’s run the code to see the updated matrix:

[,1] [,2] [,3] [1,] 1 4 7 [2,] 3 12 2 [3,] 3 6 9

Let’s check the determinant of the matrix:

det(mat)

[1] -114

We have a defined determinant for the matrix. Therefore we can find its inverse using the `solve()`

function as follows.

solve(mat)

[,1] [,2] [,3] [1,] -0.8421053 -0.05263158 0.6666667 [2,] 0.1842105 0.10526316 -0.1666667 [3,] 0.1578947 -0.05263158 0.0000000

## Summary

Congratulations on reading to the end of this tutorial!

For further reading on R-related errors, go to the articles:

- How to Solve R Error as.Date.numeric(x) : ‘origin’ must be supplied
- How to Solve R Error: Incorrect number of dimensions
- How to Solve R Error in scan: Line 1 did not have X elements
- How to Solve R Error: invalid (NULL) left side of assignment

Go to the online courses page on R to learn more about coding in R for data science and machine learning.

Have fun and happy researching!

Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.