poundifdef
poundifdef

Reputation: 19353

How to define argument types for R functions?

I am writing an R function, and I want to make sure that the argument of my R function is of a certain class (eg, "matrix").

What is the best way to do this?

Say I have a function "foo" which computes the inverse of a matrix:

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

How can I say - as you might in C - function(matrix x) to denote that "x must be of type matrix, and if it isn't, then return an error"?

Upvotes: 14

Views: 20699

Answers (3)

hadley
hadley

Reputation: 103898

stopifnot(is.matrix(x))

Upvotes: 16

Dirk is no longer here
Dirk is no longer here

Reputation: 368191

Just for completeness: besides

is.matrix(foo) 

you can also test for

class(foo) == "matrix" 

which also works for non-standard that do not have is.foo() functions.

Upvotes: 3

Shane
Shane

Reputation: 100154

You can either check that it's a matrix with is.matrix or else convert it with as.matrix after the parameter is passed:

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)
}

Upvotes: 15

Related Questions