2013-11-02 3 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'을 사용하여 함수의 유효성을 검사하는 방법과 함수에 변수를 안전하게 전달하는 방법을 보여줍니다. –