2013-08-19 33 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

ニース。ありがとうThomas。 –

0

OPの質問に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で質問のタイトルを読むときに私が探していた答えが表示されます。 –

関連する問題