2017-10-25 4 views
1

R 함수의 유용성을 확장하려면 함수 (FUN) 유형의 인수를 전달해야합니다. 다른 함수에서 함수 매개 변수를 선언하는 방법을 보여줄 수 있습니까? 전화하는 법. LikeFUN을 매개 변수로 사용하는 R 함수를 만드는 방법

MyOperation<-function(x,y,FUN){ 
    int sum<-x+y 
    if (!missing(FUN)) sum<-FUN(sum)} 
    return sum 
} 

Res<- MyOperation(x=1,y=2,FUN=function(n){...}) 
+1

R 코드를 다른 언어와 혼합하는 것처럼 보입니다. 예를 들어 R에서는 변수 유형을 int로 선언하지 않습니다. R _knows_는 입력이 정수일 때 정수 변수를 생성한다는 것을 의미합니다. – useR

답변

3

변수를 선언하지 마십시오. 또한 형식 인수 목록에서 기본값을 지정할 수 있습니다. 이 경우 missing을 사용할 필요가 없습니다.

이 경우 FUN(x + y)을 실행하거나 FUN을 지정하지 않은 경우 x+y을 반환합니다.

myOp2 <- function(x, y, FUN = identity) FUN(x + y) 

myOp2(1, 2) 
## [1] 3 

myOp2(1, 3, sqrt) 
## [1] 2 

한 향상은 함수가 함수 또는 문자열로 지정해야 할 수 있도록 할 수 있습니다

myOp2a <- function(x, y, FUN = identity) { 
    FUN <- match.fun(FUN) 
    FUN(x + y) 
} 

myOp2a(1, 3, "sqrt") 
## [1] 2 

myOp2a(1, 3, sqrt) 
## [1] 2 

x 요약 및 yFUN 경우가 지정되지 않은; 그렇지 않으면, xy 인수를 사용하여 FUN을 실행합니다.

myOp3 <- function(x, y, FUN = sum) FUN(x, y) 

myOp3(1, 2) 
## [1] 3 

myOp3(1, 2, min) 
## [1] 1 
1

거기에 기본적인 R 구문 문제가 있습니다. R에 int이 없으며 함수 닫는 대괄호가 잘못된 위치에 있었고 return()은 R이 아닌 함수로 키워드가 아닙니다. 체크 아웃

MyOperation<-function(x,y,FUN){ 
    sum <- x+y 
    if (!missing(FUN)) sum<-FUN(sum) 
    return(sum) 
} 

MyOperation(x=1,y=2) 
# [1] 3 
MyOperation(x=1,y=2,FUN=function(n){n+100}) 
# [1] 103