ZT2008
2008-Apr-04 22:03 UTC
[Rd] How to create a function calling two functions with unknown number of parameters?
... can be used to represent unknown number of parameters passed into a function. For example, I write a function g. g calls another function f1. For example f1 could be different random number generation function. when f1=rnorm(), it has 3 parameters n, mean and standard deviation. when f1=rexp(), it has 2 parameters n and rate. g can be defined as g <- function(f1, ...) { f1(...) } My problem is what about g calls two functions with unknown number of parameters. In this case one ... doesn't help. If I define g as follows: g <- function(f1, f2, ...) { f1(...)+f2(...) } It seems ... is only passed to f1, it can't be passed to f2. Can anybody help me? Thanks! -- View this message in context: http://www.nabble.com/How-to-create-a-function-calling-two-functions-with-unknown-number-of-parameters--tp16501233p16501233.html Sent from the R devel mailing list archive at Nabble.com.
Vincent Goulet
2008-Apr-05 15:45 UTC
[Rd] How to create a function calling two functions with unknown number of parameters?
Le ven. 4 avr. ? 18:03, ZT2008 a ?crit :> > > ... can be used to represent unknown number of parameters passed > into a > function. > > For example, I write a function g. g calls another function f1. > > For example f1 could be different random number generation function. > > when f1=rnorm(), it has 3 parameters n, mean and standard deviation. > > when f1=rexp(), it has 2 parameters n and rate. > > g can be defined as > > g <- function(f1, ...) { > f1(...) > } > > My problem is what about g calls two functions with unknown number of > parameters. > > In this case one ... doesn't help. > > If I define g as follows: > > g <- function(f1, f2, ...) { > f1(...)+f2(...) > } > > It seems ... is only passed to f1, it can't be passed to f2.You should get around what you want with something along the lines of dots <- list(...) argf <- formals(f) argg <- formals(g) and then extracting from 'dots' elements corresponding to 'argf' and 'argg' (using their names). HTH> > > Can anybody help me? Thanks! > > -- > View this message in context: http://www.nabble.com/How-to-create-a-function-calling-two-functions-with-unknown-number-of-parameters--tp16501233p16501233.html > Sent from the R devel mailing list archive at Nabble.com. > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel--- Vincent Goulet, Associate Professor ?cole d'actuariat Universit? Laval, Qu?bec Vincent.Goulet at act.ulaval.ca http://vgoulet.act.ulaval.ca
Uwe Ligges
2008-Apr-05 19:35 UTC
[Rd] How to create a function calling two functions with unknown number of parameters?
ZT2008 wrote:> > ... can be used to represent unknown number of parameters passed into a > function. > > For example, I write a function g. g calls another function f1. > > For example f1 could be different random number generation function. > > when f1=rnorm(), it has 3 parameters n, mean and standard deviation. > > when f1=rexp(), it has 2 parameters n and rate. > > g can be defined as > > g <- function(f1, ...) { > f1(...) > } > > My problem is what about g calls two functions with unknown number of > parameters. > > In this case one ... doesn't help. > > If I define g as follows: > > g <- function(f1, f2, ...) { > f1(...)+f2(...) > } > > It seems ... is only passed to f1, it can't be passed to f2.No, it is passed to both: g <- function(f1, f2, ...) { f1(...) + f2(...) } f1 <- function(a) print(a) f2 <- function(a) print(a) g(f1, f2, 5) [1] 5 [1] 5 [1] 10> Can anybody help me? Thanks!Well, what you requested already works... If you want to pass different arguments to f1 and f2, you might want to specify two *lists* of arguments for f1() and f2() in g() and call f1() and f2() by do.call() within g(). Uwe Ligges