dot-dot-dot引数の範囲について質問があります。次の関数を考えてみましょう`foo=
foo <- function(x, ...){
require(classInt);
intvl = classIntervals(x, ...);
return(intvl);
}
この関数は、次の呼び出しに最適です
x = runif(100, 0, 100);
y1 = foo(x, n = 5, style = 'quantile');
y2 = foo(x, style = 'equal');
しかし、fixedBreaks引数も必要とするstyle ='fixed'引数を使用しようとすると、次のようになります。
y3 = foo(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
eval(expr、envir、enclos)のエラー:...リストに2つの要素が含まれていません
以下は完全に機能することに注意してください
y5 = classIntervals(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
これはスコーピングルールと関係があるのではないかと思いますが、指を置くことができませんでした。これに関する助けをいただければ幸いです。
編集。私はそれを機能させるより単純なハックを作り上げました。style ='pretty'にも同じ問題が存在するため、これはmatch.callの問題だと思います。コードをざっと見てみると、これらがそのようなmatch.callが行われる2つのスタイルであることがわかります。したがって、これがエラーの原因である可能性が非常に高くなります。いずれにせよ、これが私の提案したハックです
foo2 <- function(x, ...){
require(classInt);
y = list(...); y$var = x;
intvl = do.call('classIntervals', y);
}
y6 = foo2(x, style = 'fixed', fixedBreaks = seq(0, 100, 20))
私の質問に対するRichieの答えは、私の以前のコードが機能しなかった理由を明らかにしていると思います。しかし、私はまだこれがなぜそうするのか理解していません。