0

我想测试一个矩阵在 R 中是否是奇异的。我尝试了一个函数,它是

is.non.singular.matrix()matrixcalc包装中。

但是,有时,在我的情况下,会生成一个 60*60 的矩阵,函数返回FALSE,这意味着矩阵是奇异的。但我仍然可以solve()用来获取矩阵的反转。我应该相信哪一个?还有其他更好的方法吗?

或者,对于奇异矩阵,solve()将返回错误消息。有没有办法写一个语句,如果solve()返回错误,然后做其他事情(例如,为对角线元素添加一些变化)。但是我不知道如何获取错误信息的返回值。

4

1 回答 1

1

测试是否try()返回类“try-error”的对象:

 mtx <- matrix(c(1,1,2,2), 2)
 if ( inherits( try( solve(mtx), silent=TRUE),  "try-error")){"oops"} else {solve(mtx)}
[1] "oops"

> if ( inherits( try( solve(mtx), silent=TRUE),  "try-error")){
                                     print("oops"); solve(mtx+ rnorm(4) )
                                    } else {solve(mtx)}
[1] "oops"
           [,1]      [,2]
[1,]  0.8310745 -1.618425
[2,] -1.0580812  3.050279

您可以想象将其构建为递归函数。看:

?Recall
于 2014-04-17T01:12:43.453 回答