Как определить типы аргументов для R-функций?

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

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

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

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

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

Ответ 1

Вы можете либо проверить, что это матрица с 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)
}

Ответ 2

stopifnot(is.matrix(x))

Ответ 3

Только для полноты: кроме

is.matrix(foo) 

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

class(foo) == "matrix" 

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