2013-11-02 160 views
0

我需要用函数参数编写一个函数,它将略微修改函数并返回修改后的函数。具有函数参数的R函数

我有什么到目前为止

discriminant.functions <- function(priordist1,PC1) 
{ 
    g1 <- PC1*match.fun(priordist1) 
    return(g1) 
} 

,但它不工作 - 我得到以下错误消息时我调用该函数:

discriminant.functions(function(x1,x2) 36*x1*x2*(1-x1)*(1-x2),0.5) 
Error in PC1 * match.fun(priordist1) : 
    non-numeric argument to binary operator 

我不是非常有经验有R所以我不知道是否有明显的方法来做到这一点,它看起来应该很简单。任何帮助表示感谢,非常感谢!

回答

1

match.fun用于检查参数是否为函数,您需要在这里调用函数。直接FUNC(...),或使用do.call这样的:

## use ... for extra func arguments 
discriminant.functions <- 
function(func,PC1,...){ 
    match.fun(func) ## check if func s a function 
    function(...) PC1* do.call(func,list(...)) 
} 

我测试它的*功能:

mult2 <- discriminant.functions ("*",2) 
mult2(5,4) 
[1] 40 
+0

@Caterina,它也可能是有益的看到'outer'代码(只需在控制台上输入“outer”,不带圆括号)。它显示了如何使用'match.fun'来验证你的函数,以及如何以安全的方式将变量提供给你的函数。 –