2013-11-02 4 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' (Просто введите «внешний» на консоли, без круглых скобок). В нем показано, как использовать 'match.fun' для проверки вашей функции, а затем, как безопасно передавать переменные в вашу функцию. –

Смежные вопросы