2009-11-16 25 views
11

Estoy escribiendo una función R, y quiero asegurarme de que el argumento de mi función R sea de cierta clase (por ejemplo, "matriz").¿Cómo se definen los tipos de argumentos para las funciones R?

¿Cuál es la mejor manera de hacerlo?

Digamos que tiene una función "foo", que calcula la inversa de una matriz:

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

¿Cómo se puede decir que - como es posible en C - function(matrix x) para denotar que "x debe ser del tipo matrix, y si no es así, devuelve un error "?

Respuesta

13

Usted puede comprobar que se trata de una matriz con is.matrix o bien convertirlo con as.matrix después de que el parámetro se pasa:

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

Bien, bien. Estaba completamente ajeno a "is.matrix". ¡Gracias! – poundifdef

+0

Esencialmente, cada tipo de datos tiene una función * is * y * as *. – Shane

3

simplemente para la corrección: además

is.matrix(foo) 

se también puede probar para

class(foo) == "matrix" 

que también trabaja para no estándar que no tienen is.foo() funciones.

+5

Tenga cuidado aquí, ya que los objetos en R podrían tener más de una clase. Entonces el código debe leer "matriz"% en% clase (foo). –

+0

De acuerdo, ¡gracias! –

+3

O use 'inherits' – hadley

12

stopifnot(is.matrix(x))

Cuestiones relacionadas