roxygen's Curry関数を見てみましたか?
> library(roxygen)
> Curry
function (FUN, ...)
{
.orig = list(...)
function(...) do.call(FUN, c(.orig, list(...)))
}
<environment: namespace:roxygen>
使用例:
> aplusb <- function(a,b) {
+ a + 2*b
+ }
> oneplusb <- Curry(aplusb,1)
> oneplusb(2)
[1] 5
編集: カレーを簡潔に名前付きまたは名前なし引数を受け入れるように定義されていますが、formal()
譲渡の方法によって、引数にfun
の部分的なアプリケーションがに、より洗練されたマッチングを必要としています同じ機能をエミュレートします。例えば:
> bind <- function(fun,...)
+ {
+ argNames <- names(formals(fun))
+ boundArgs <- list(...)
+ boundNames <- names(boundArgs)
+ if(is.null(boundNames)) {
+ formals(fun)[1:length(boundArgs)] <- boundArgs
+ } else {
+ formals(fun)[match(names(boundArgs),argNames)] <- boundArgs
+ }
+ fun
+ }
> oneplusb <- bind(aplusb,1)
> oneplusb(2)
Error in 2 * b : 'b' is missing
この関数の最初の引数はまだa
ですので、あなたは2
が(b=
)のために意図されている引数を指定、または2番目の引数として渡しする必要があります。
> oneplusb
function (a = 1, b)
{
a + 2 * b
}
> oneplusb(b=2) ## or oneplusb(,2)
[1] 5
あなたは何をしようとしていますか?コール関数は、それが正式な引数で 'fun'として渡されましたか?もしそうなら、「楽しい」にも「...」があるとしたら? –
bunction引数を見つける方法 – mdsumner