2009-11-16 18 views
11

Sto scrivendo una funzione R, e voglio assicurarmi che l'argomento della mia funzione R sia di una certa classe (es. "Matrice").Come definire i tipi di argomento per le funzioni R?

Qual è il modo migliore per farlo?

Dire Ho una funzione "foo" che calcola l'inversa di una matrice:

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

come posso dire - come si potrebbe in C - function(matrix x) a indicare che "x deve essere di tipo matrix, e se non lo è, restituire un errore "?

risposta

13

è possibile verificare che si tratta di una matrice con is.matrix oppure convertirlo con as.matrix dopo il parametro viene passato:

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, bello. Ero completamente ignaro di "is.matrix". Grazie! – poundifdef

+0

Essenzialmente ogni tipo di dati ha una funzione * è * e * come *. – Shane

3

Solo per completezza: oltre

is.matrix(foo) 

voi può anche testare per

class(foo) == "matrix" 

che funziona anche per i non-standard che non hanno is.foo() funzioni.

+5

Fare attenzione qui, poiché gli oggetti in R potrebbero avere più di una classe. Quindi il codice dovrebbe leggere "matrix"% in% class (foo). –

+0

D'accordo, grazie! –

+3

Oppure usa 'inherits' – hadley

12

stopifnot(is.matrix(x))

Problemi correlati