The problem is solved with call to `do.call`:

|wrapperfX<-  function(x){
   dots<-if(missing(x)){
     list()
   }else{
     list(x=x)
   }
   do.call(targetf,dots)
}|

It is a little awkward (such elementary operation should be one liner 
IMHO), it might be slow, but it works.

I guess `match.call` is better in solving simpler problems, such as 
passing all arguments (named, unnamed and ...) into targetf.

Thank you for your help!


Adam Ryczkowski

On 13.09.2013 13:21, Gerrit Eichner wrote:
> Hello, Adam,
>
> I'm rather uncertain about your goal (and consequently even more so 
> about how to reach it), but anyway, maybe the function match.call() 
> with its argument expand.dots is of some help for you. From its help 
> page:
>
> "match.call is most commonly used in two circumstances:
>
>     To record the call for later re-use: for example most 
> model-fitting functions record the call as element call of the list 
> they return. Here the default expand.dots = TRUE is appropriate.
>
>     To pass most of the call to another function, often model.frame. 
> Here the common idiom is that expand.dots = FALSE is used, and the ... 
> element of the matched call is removed. An alternative is to 
> explicitly select the arguments to be passed on, as is done in lm."
>
>
>  Hth  --  Gerrit
>
> On Fri, 13 Sep 2013, Adam Ryczkowski wrote:
>
>>
>>   (This is crosspost from
>> [1]http://stackoverflow.com/questions/18670895/how-to-write-a-wrapper-functi
>>   on-which-can-honour-default-values-when-the-target, posted week 
>> ago, where
>>   although the question did receive some attention, nobody was able 
>> to help
>>   me.)
>>   I'd like to write a more-or-less generic caller to `targetf` that 
>> retains
>>   its default parameters.
>>   Suppose we have a provided by some 3rd party library `targetf`:
>>       targetf<-function(x=1,...){
>>           print(paste("x =",x))
>>       }
>>   How to write `wrapperf`, that will respect `targetf`s default 
>> arguments, so
>>   calling `wrapperf()` would not yield the error massage `Error in 
>> paste("x
>>   =", x) : argument "x" is missing, with no default`?
>>   The obvious candidate
>>       wrapperf1<-function(x,y) {
>>           targetf(x=x)
>>       }
>>    doesn't seem to respect targetf's default value for parameter `x`.
>>   OTH the
>>       wrapperf2<-function(...) {
>>           targetf(...)
>>       }
>>    behaves correctly, but it doesn't work for me, because I only care 
>> to pass
>>   the `x` argument, (and possibly reserve the `...` to other 
>> functions in
>>   `wrapperf` body).
>>   Maybe to solve the issue I'd have to play with ellipsis filtering, 
>> which is
>>   a *terra incognita* for me at the moment...
>>       *    *    *
>>   One idea on how to solve the problem: maybe I'd need to create a 
>> specially
>>   crafted `...` object from scratch in `wrapperf` to do pseudo code 
>> like this:
>>       wrapperfX<-function(x,y,...)
>>       {
>>           ...<-if(missing(x){
>>                   list()
>>               }else{
>>                   list(x=x)
>>               }
>>           targetf(...)
>>       }
>>   But I have no idea how to even start doing assignments into 
>> ellipsis... is
>>   it possible at all?
>>   kind regards,
>>   Adam Ryczkowski
>>
>>   [2]www.statystyka.net
>>   [3]+48505919892
>>   [4]Skype:sisteczko
>>
>> References
>>
>>   1. 
>> http://stackoverflow.com/questions/18670895/how-to-write-a-wrapper-function-which-can-honour-default-values-when-the-target
>>   2. http://www.google.com/
>>   3. callto:+48505919892
>>   4. skype:sisteczko
>> ______________________________________________
>> R-help@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide 
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.


	[[alternative HTML version deleted]]

