2014-04-17 2 views
-1

Je veux tester si une matrice est singulière ou non R. J'ai essayé une fonction, qui estComment obtenir la valeur de retour si une fonction R a une erreur

is.non.singular.matrix() dans le paquet matrixcalc.

Cependant, parfois, dans mon cas, une matrice 60 * 60 est générée, la fonction renvoie FALSE, ce qui signifie que la matrice est singulière. Mais je peux toujours utiliser solve() pour obtenir l'inversion de la matrice. Lequel dois-je faire confiance? Y a-t-il une autre meilleure façon de faire? Ou, pour une matrice au singulier, solve() renverra un message d'erreur. Y at-il un moyen d'écrire une déclaration, que si solve() renvoie une erreur, alors faites quelque chose d'autre (par exemple, ajouter des variations aux éléments diagonaux). Mais je ne sais pas comment obtenir la valeur de retour du message d'erreur.

Répondre

1

test si try() retourne un objet de classe « essayez d'erreur »:

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 

Vous pourriez imaginer construire cela comme une fonction récursive. Voir:

?Recall 
+0

Jamais maintenant la fonction try(). C'est bien. Merci beaucoup. Je vais vérifier plus sur ces fonctions. –

+0

Pourriez-vous m'en dire plus sur les héritages? Le menu R n'est pas si facile à suivre ... –

+0

Je veux dire, est-ce que le 'try-error' est un type de classe? –

Questions connexes