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-1. Therefore A-1 is not defined when 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.