Another option is to use a closure, which isolates the arguments explicitly.

aFunction <- function(data, alpha, ...)
{
   transform(alpha, ...)
   rowMeans(data) > alpha
}

f <- function(data, selection, ...)
{
   selected <- selection(data) # Remove ellipsis from here
   plot(data[selected, ], ...)
}

f(aDataset, function(data) aFunction(data, alpha = 10, transform = sqrt), pch = 
19)

•••••
Brian Lee Yung Rowe
Founder, Zato Novo
Professor, M.S. Data Analytics, CUNY




On May 28, 2014, at 7:34 AM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote:


> On 28/05/2014, 2:00 AM, Dario Strbenac wrote:
>> Hello
>> 
>> If I have a function
>> 
>> aFunction <- function(data, alpha, ...)
>> {
>>     transform(alpha, ...)
>>     rowMeans(data) > alpha
>> }
>> 
>> f <- function(data, selection, ...)
>> {
>>     selected <- selection(data, ...)
>>     plot(data[selected, ], ...)
>> }
>> 
>> f(aDataset, aFunction, alpha = 10, pch = 19, transform = sqrt)
>> 
>> and selection calls another function, which has ... and that function calls 
>> other functions, is there an easier way than getting the formals of all the 
>> functions called internally by selection, and all of the formals of 
>> functions called by plot ? Is there any option to change the error into a 
>> warning message ?
> 
> You can use try() to catch an error, but you can't ignore it.  The code that 
> triggered the error will still exit at that point.
> 
> There are at least two common ways of handling the situation where you want 
> to pass optional args to two different functions.  One is to use
> 
> args <- list(...)
> 
> to get all the arguments in a list, and then manually split up the list, and 
> use do.call() to pass some of them on.  Generally you would do this only if 
> you knew in advance how to split the args, you wouldn't try to call formals() 
> to work it out at run-time.
> 
> Another way is to have an argument like "control" in optim(), and ask the 
> user to pass one set of options via that, and the other via ... . You'd use 
> do.call() again to construct that call.
> 
> Duncan Murdoch
> 
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to