Skip to content

Two functions as parametrs of a function.

7 messages · Kenneth Cabrera, Henrique Dallazuanna, Duncan Murdoch +1 more

#
Hi R users:

I'm trying to make a function where two of the parameters are
functions, but I don't know how to put each set of parameters for
each function.

What am I missing?

I try this code:

f2<-function(n=2,nsim=100,fun1=rnorm,par1=list(),fun2=rnorm,par2=list()){
    force(fun1)
    force(fun2)
    force(n)
    p1<-unlist(par1)
    p2<-unlist(par2)
    force(p1)
    force(p2)
    localfun1 <- function() fun1(n, p1)
    localfun2 <- function() fun2(n, p2)
    vp<-replicate(nsim,t.test(localfun1(), localfun2())$p.value)
    return(vp)
}

f2(fun1=rbeta,par1=list(shape1=2,shape2=2),fun2=rbeta,par2=list(shape1=1,shape2=2))

Thank you for your help.

Kenneth
#
On 07/04/2011 7:45 AM, Kenneth Roy Cabrera Torres wrote:
You don't want to unlist those.  Leave them as lists, and use the 
do.call() function for the calls.  For example,

localfun1 <- function() do.call(fun1, c(list(n), par1))
Calling force() is only useful for arguments to your function:  it kicks 
the evaluator, so it's not so lazy.   Since p1 and p2 were calculated 
earlier, there's no need to force them.  You might need to force n, 
since it is only used in the localfun1 and localfun2 calls, and if the 
argument to f2 changes before you make those calls, the wrong value will 
be used.  That's pretty unlikely with your code, but since fun1 and fun2 
can do anything, it's safest to fix the value of n before you call 
them.  The same argument applies to fun1 and fun2 themselves.

Duncan Murdoch
#
Try this:

f2 <- function(n, nsim, fun1, fun2) {
	vp <- replicate(nsim, do.call(fun1$name, c(n, fun1$args)),
				    do.call(fun1$name, c(n, fun1$args)))
	vp

}

f2(2, 100, fun1 = list(name = rbeta, args = list(shape1 = 2, shape2 =
2), fun1 = list(name = rbeta, args = list(shape1 = 2, shape2 = 2))))

On Thu, Apr 7, 2011 at 8:45 AM, Kenneth Roy Cabrera Torres
<krcabrer at une.net.co> wrote:

  
    
#
On 07/04/2011 10:12 AM, KENNETH R CABRERA wrote:
For details of the concepts, you should look in the "R Language 
Definition" manual (and perhaps "An Introduction to R" for some more 
examples).

For individual functions, the help page for each usually includes some 
examples.

And then there's the source code, but if the manuals are unclear, it may 
be no clearer.

Duncan Murdoch
#
On Apr 7, 2011, at 10:47 AM, Duncan Murdoch wrote:

            
-- Duncan Murdoch ... after citing the the usual suspects.
        R-help (April 2011)

Fortune candidate?