2017-05-24 12 views
6

ユーザは、自分自身のモデル選択関数を入力として使用できるようにするための関数を探しています。適用するファミリによく似た入力とは対照的に、簡単なR関数を作成する方法について検索結果を取得し続けるうちに、答えを見つけるのに問題があります。ここで FUN入力がrになっている関数を作成する

は、私が探しています何に似てではなく、かなりの例である:

simple<- function(mod, FUN){ 
    switch(FUN, 
     AIC = AIC(mod), 
     BIC = BIC(mod)) 
} 
simple(lm(rnorm(100) ~ rnorm(100,4)), "AIC") 

上記のコードが実行されますが、私は可能な機能のすべてを計画し、スイッチ内でそれらを記述する必要があります。私はまた、単にAICとは対照的に「AIC」を書くことを余儀なくされています。

私が探している機能をどのように作成できますか?追加情報が必要な場合はお知らせください。

+2

私はあなたが 'match.fun()'を探していると思います。 – joran

答えて

8

このような何か:

simple<- function(mod, FUN){ 
    FUN <- match.fun(FUN) 
    FUN(mod) 
} 

simple(lm(rnorm(100) ~ rnorm(100,4)),FUN = "BIC") 

match.funは、関数、記号や文字を受け入れ、そうFUN引数が渡される方法にある程度の柔軟性があります。

コメントで述べたように、複数の機能を渡すためのオプション:

simple <- function(mod, FUN){ 
    FUNS <- lapply(FUN,match.fun) 
    lapply(FUNS,function(fun) fun(mod)) 
} 
+0

はい、それは私が探しているものです。それは私が見ていたものである引用符で囲まれていないBICで動作します。非常に感謝します。すぐに答えられるようにマークします。 –

+3

@EvanFriedland将来の問題解決のヒント:*あなたは、* apply関数のような何かをしたいと思っていたことを正しく知っていました。コンソールで 'lapply'、' sapply'、 'apply'と入力して、それらの関数の最初の行を見てください。 ;) – joran

+0

@冗談ですが、この場合、一度に1つのFUNしか渡すことはできません。 "AIC"または "BIC"のいずれかで、 'FUN = c(" AIC "、" BIC ")'?私は試してエラーが発生しました。 –

関連する問題