Hi, Please consider the following functions: myf1 <- function(x,fun){ if (is.null(fun)){ x } else { do.call(fun, list(x)) } } myf2 <- function(a=1, b=2, fun=NULL, c=myfun1(b,fun)){ if (myf1(b,fun)>0 & <c was not provided in function call>){ c <- b } print(list(a,b,c)) } myf2(a=2,b=3,fun=exp) myf2(a=2,b=3,fun=exp,c=4) I need to replace "<c was not provided in function call>" by some code that would make myf2 aware of it own calls and of the fact that the c argument was provided or not in the function calls. Thanks for your help Sebastien
Jeff Newmiller
2016-Mar-24 12:47 UTC
[R] How to make a function aware of its own call arguments
Don't provide a default value for c in the parameter list. Then you can use the missing() function to make decisions, including whether to generate a default value for c or not. -- Sent from my phone. Please excuse my brevity. On March 24, 2016 5:11:43 AM PDT, sbihorel <Sebastien.Bihorel at cognigencorp.com> wrote:>Hi, > >Please consider the following functions: > >myf1 <- function(x,fun){ > if (is.null(fun)){ > x > } else { > do.call(fun, list(x)) > } >} > >myf2 <- function(a=1, b=2, fun=NULL, c=myfun1(b,fun)){ > > if (myf1(b,fun)>0 & <c was not provided in function call>){ > c <- b > } > print(list(a,b,c)) >} > >myf2(a=2,b=3,fun=exp) >myf2(a=2,b=3,fun=exp,c=4) > >I need to replace "<c was not provided in function call>" by some code >that would make myf2 aware of it own calls and of the fact that the c >argument was provided or not in the function calls. > >Thanks for your help > >Sebastien > >______________________________________________ >R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >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]]
Hi, Thanks for your suggestion. missing(x) works only if x is not altered within the function, which is not the case in my actual function (which is more complex than the example function I send in my previous post). Are you aware of any function what would query the original function call arguments no matter what happens in the function? Sebastien On 3/24/2016 8:47 AM, Jeff Newmiller wrote:> Don't provide a default value for c in the parameter list. Then you > can use the missing() function to make decisions, including whether to > generate a default value for c or not. > -- > Sent from my phone. Please excuse my brevity. > > On March 24, 2016 5:11:43 AM PDT, sbihorel > <Sebastien.Bihorel at cognigencorp.com> wrote: > > Hi, > > Please consider the following functions: > > myf1 <- function(x,fun){ > if (is.null(fun)){ > x > } else { > do.call(fun, list(x)) > } > } > > myf2 <- function(a=1, b=2, fun=NULL, c=myfun1(b,fun)){ > > if (myf1(b,fun)>0 & <c was not provided in function call>){ > c <- b > } > print(list(a,b,c)) > } > > myf2(a=2,b=3,fun=exp) > myf2(a=2,b=3,fun=exp,c=4) > > I need to replace "<c was not provided in function call>" by some code > that would make myf2 aware of it own calls and of the fact that the c > argument was provided or not in the function calls. > > Thanks for your help > > Sebastien > > ------------------------------------------------------------------------ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE d > o read > the posting guidehttp://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Sebastien Bihorel Associate Director, Pharmacometrics Buffalo Office: +1-716-633-3463 ext. 323 | Website <http://www.cognigencorp.com> <http://www.simulations-plus.com/Default.aspx>