2009-11-16 3 views
11

Я пишу функцию R, и я хочу убедиться, что аргумент моей функции R имеет определенный класс (например, «матрица»).Как определить типы аргументов для R-функций?

Каков наилучший способ для этого?

Скажем, у меня есть функция «Foo», который вычисляет обратную матрицу:

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

Как я могу сказать - как вы могли бы в C - function(matrix x) для обозначения того, что "x должен быть типа matrix, и если это не так, то верните ошибку "?

ответ

13

Вы можете проверить, что это матрица с is.matrix или же преобразовать его с as.matrix после того, как параметр передается:

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

Хорошо, круто. Я просто совершенно не обращал внимания на «is.matrix». Благодаря! – poundifdef

+0

По сути, каждый тип данных имеет функцию * is * и * as *. – Shane

3

Просто для полноты: помимо

is.matrix(foo) 

вы можно также проверить

class(foo) == "matrix" 

, который также работает в нестандартном, которые не имеют is.foo() функции.

+5

Здесь нужно быть осторожным, поскольку объекты в R могут иметь более одного класса. Поэтому код должен читать «matrix»% в% class (foo). –

+0

Согласен, спасибо! –

+3

Или используйте 'inherits' – hadley

Смежные вопросы