2009-11-16 6 views
11

J'écris une fonction R, et je veux m'assurer que l'argument de ma fonction R est d'une certaine classe (par exemple, "matrice").Comment définir les types d'arguments pour les fonctions R?

Quelle est la meilleure façon de faire cela?

Dire que j'ai une fonction « foo » qui calcule l'inverse d'une matrice:

foo <- function(x) 
{ 
    # I want to make sure x is of type "matrix" 
    solve(x) 
} 

Comment puis-je dire - comme vous pourriez en C - function(matrix x) pour indiquer que "x doit être de type matrix, et si ce n'est pas le cas, retournez une erreur "?

Répondre

13

Vous pouvez vérifier que c'est une matrice avec is.matrix ou convertir autre avec as.matrix après le paramètre est passé:

foo <- function(x) 
{ 
    if(!is.matrix(x)) stop("x must be a matrix") 
    # I want to make sure x is of type "matrix" 
    solve(x) 
} 
+0

OK, cool. J'étais complètement inconscient de "is.matrix". Merci! – poundifdef

+0

Essentiellement, chaque type de données a une fonction * is * et * as *. – Shane

3

Juste pour être complet: en plus

is.matrix(foo) 

vous peut également tester

class(foo) == "matrix" 

qui fonctionne également pour les non-standard qui n'ont pas is.foo() fonctions.

+5

Vous devez faire attention ici, car les objets dans R peuvent avoir plusieurs classes. Donc le code devrait lire "matrix"% dans% class (foo). –

+0

D'accord, merci! –

+3

Ou utiliser 'hériter' – hadley

12

stopifnot(is.matrix(x))

Questions connexes