2013-11-02 157 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'來驗證你的函數,以及如何以安全的方式將變量提供給你的函數。 –