passing several arguments to FUN of lapply (and others *apply)

I have a question regarding passing multiple arguments to a function, when using lapply in R.

When I use lapply with the syntax of lapply(input, myfun); - this is easily understandable, and I can define myfun like that:

myfun <- function(x) {
 # doing something here with x
}

lapply(input, myfun);

and elements of input are passed as x argument to myfun.

But what if I need to pass some more arguments to myfunc? For example, it is defined like that:

myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

How can I use this function with passing both input elements (as x argument) and some other argument?


Solution 1:

If you look up the help page, one of the arguments to lapply is the mysterious .... When we look at the Arguments section of the help page, we find the following line:

...: optional arguments to ‘FUN’.

So all you have to do is include your other argument in the lapply call as an argument, like so:

lapply(input, myfun, arg1=6)

and lapply, recognizing that arg1 is not an argument it knows what to do with, will automatically pass it on to myfun. All the other apply functions can do the same thing.

An addendum: You can use ... when you're writing your own functions, too. For example, say you write a function that calls plot at some point, and you want to be able to change the plot parameters from your function call. You could include each parameter as an argument in your function, but that's annoying. Instead you can use ... (as an argument to both your function and the call to plot within it), and have any argument that your function doesn't recognize be automatically passed on to plot.

Solution 2:

As suggested by Alan, function 'mapply' applies a function to multiple Multiple Lists or Vector Arguments:

mapply(myfun, arg1, arg2)

See man page: https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html