我想在R中测试矩阵是否是单数。我尝试了一个函数,即
is.non.singular.matrix()
包中的 matrixcalc
。
然而,有时,在我的情况下生成了60 * 60矩阵,函数返回FALSE
,这意味着矩阵是单数的。但我仍然可以使用solve()
来获得矩阵的反转。我应该相信哪一个?还有其他更好的方法吗?
或者,对于单数矩阵,solve()
将返回错误消息。有没有办法编写语句,如果solve()
返回错误,则执行其他操作(例如,向对角元素添加一些变体)。但我不知道如何获取错误消息的返回值。
答案 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