如果R函数有错误,如何获取返回值

时间:2014-04-17 00:51:12

标签: r matrix matrix-inverse singular

我想在R中测试矩阵是否是单数。我尝试了一个函数,即

is.non.singular.matrix()包中的

matrixcalc

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

或者,对于单数矩阵,solve()将返回错误消息。有没有办法编写语句,如果solve()返回错误,则执行其他操作(例如,向对角元素添加一些变体)。但我不知道如何获取错误消息的返回值。

1 个答案:

答案 0 :(得分:1)

测试try()是否返回类的对象"尝试错误":

 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