2013-08-19 3 views
6

래퍼 함수가 있는데 여기에 지정된 하위 함수에 선택적 인수를 전달해야합니다. 그러나 내가 미리 지정할 수없는 여러 가지 가능한 하위 기능이 있습니다. 참고로 은 하위 기능은 환경 등에 존재 ... 고려 :래퍼 함수 내에서 선택적 인수를 하위 함수로 전달

funInFun<- function (x, method, ...) {  

    method.out <- function(this.x, FUN, ...) { 
    FUN <- match.fun(FUN) 
    c <- FUN(this.x, ...) 
    return(c) 
    } 

    d <- method.out(x, method) 
    return(d) 
} 

data<-seq(1,10) 
funInFun(data, mean) # Works 

data<-c(NA,seq(1,10)) 
funInFun(data, mean, na.rm=TRUE) # Should remove the NA 

funInFun(c(seq(1,10)), quantile, probs=c(.3, .6)) # Shoudl respect the probs option. 

답변

5

당신은 ...method.out에 통과해야합니다. 그리고 그것을 잘 작동합니다 :

funInFun<- function (x, method, ...) {  

    method.out <- function(this.x, FUN, ...) { 
    FUN <- match.fun(FUN) 
    c <- FUN(this.x, ...) 
    return(c) 
    } 

    d <- method.out(x, method, ...) # <<--- PASS `...` HERE 
    return(d) 
} 

data<-seq(1,10) 
funInFun(data, mean) # Works 
# [1] 5.5  

data<-c(NA,seq(1,10)) 
funInFun(data, mean, na.rm=TRUE) # Should remove the NA 
# [1] 5.5 

funInFun(c(seq(1,10)), quantile, probs=c(.3, .6)) 
# 30% 60% 
# 3.7 6.4 
+0

니스. 고마워요 토마스. –

0

영업의 질문에 Thomas' answer뿐만 아니라 당신이 래퍼 함수의 명시 적 인수 인 선택적 인수를 전달해야 할 수도 있습니다.

이 경우 래퍼 정의에서 래핑 된 함수의 기본값을 반복하는 대신 missing을 사용하여 누락 된 인수가있는 호출을 구성 할 수 있습니다.

f <- function(s = "world!") cat("Hello", s) 
f() 
# Hello world! 
g <- function(s = NULL) eval(substitute(
    f(s = sub_me), 
    list(sub_me = if(missing(s)) quote(expr =) else s))) 
g() 
# Hello world! 
g("you!") 
# Hello you! 
+0

이것은 OPs 질문 본문에 명시된 질문에 대답하지 않지만 그것은 Google에서 질문 제목을 읽을 때 찾고 있던 대답을 제공합니다. –

관련 문제