R에서 복구하는 방법: 시스템이 정확히 특이합니다.
R에서 발생할 수 있는 오류는 다음과 같습니다.
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
이 오류는 solv() 함수를 사용하려고 할 때 발생하지만 작업 중인 행렬이 역행렬이 없는 특이 행렬입니다.
이 튜토리얼에서는 실제로 이 오류를 해결하는 방법을 설명합니다.
오류를 재현하는 방법
R에서 다음 행렬을 생성한다고 가정합니다.
#create singular matrix
mat <- matrix(c(1, 1, 1, 1), ncol= 2 , nrow= 2 )
#view matrix
mast
[,1] [,2]
[1,] 1 1
[2,] 1 1
이제 행렬의 역함수를 계산하기 위해 solv() 함수를 사용하려고 한다고 가정합니다.
#attempt to invert matrix
solve(mat)
Error in solve.default(mat):
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
우리가 만든 행렬에 역행렬이 없기 때문에 오류가 발생합니다.
참고 : 역행렬이 없는 행렬의 10가지 예를 보여주는 Wolfram MathWorld의 이 페이지를 확인하세요.
정의에 따르면, 행렬식이 0인 행렬은 특이 행렬입니다.
주어진 행렬을 반전시키기 전에 det() 함수를 사용하여 주어진 행렬의 행렬식을 계산할 수 있습니다.
#calculate determinant of matrix
det(mat)
[1] 0
행렬의 행렬식은 0이므로 오류가 발생하는 이유를 설명합니다.
오류를 수정하는 방법
이 오류를 수정하는 유일한 방법은 특이점이 아닌 행렬을 만드는 것입니다.
예를 들어, R에서 다음 행렬을 반전시키기 위해 solv() 함수를 사용한다고 가정합니다.
#create matrix that is not singular
mat <- matrix(c(1, 7, 4, 2), ncol= 2 , nrow= 2 )
#view matrix
mast
[,1] [,2]
[1,] 1 4
[2,] 7 2
#calculate determinant of matrix
det(mat)
[1] -26
#invert matrix
solve(mat)
[,1] [,2]
[1,] -0.07692308 0.15384615
[2,] 0.26923077 -0.03846154
행렬이 특이 행렬이 아니기 때문에 행렬을 반전할 때 오류가 발생하지 않습니다.
추가 리소스
다음 튜토리얼에서는 R의 다른 일반적인 오류를 수정하는 방법을 설명합니다.
해결 방법: 조건의 길이가 1보다 크고 첫 번째 요소만 사용됩니다.
해결 방법: 이항 연산자의 숫자가 아닌 인수
해결 방법: 희미한(X) 길이는 양수여야 합니다.
해결 방법: 사용하지 않는 인수를 선택하는 중 오류가 발생했습니다.