2

R で、2 番目の関数とその引数 (その一部はベクトル) を引数として取る関数を作成しようとしています。私が望む最終的な結果は、時系列に作用する関数を呼び出すローリング関数を作成することですが、「適用」関数はすべて要素ごとにベクトル要素に関数を適用します。私が望むのは、関数をベクトル全体に適用することです。例えば、

a = c(1,2,3); b = c(4,5,6)
sapply(a,function(x,y,c) c*t(x)%*%y,b,c=2)
     [,1] [,2] [,3]
[1,]    8   16   24
[2,]   10   20   30
[3,]   12   24   36

しかし、私が本当に欲しいのは:

2*t(a)%*%b
     [,1]
[1,]   64

時系列に沿って関数をロールすることができます。また、2 番目の関数とそのパラメーターを引数として含むジェネリック関数を作成しようとしましたが、パラメーターを受け入れることができないようです。例えば、

foo <- function(func,parm){
    return(func(parm))
}

foo(function(x,y,c) c*t(x)%*%y,parm=list(a,b,c=2))
Error in c * t(x) %*% y : 'c' is missing

ここでの問題は、func が引数のリストを受け入れないことですが、関数に引数のリストを渡すにはどうすればよいでしょうか? これがあまり混乱しないことを願っています。提供されたヘルプに感謝します。

4

1 に答える 1

4

必要なものを正しく推測した場合は、関数内で次のことを行う必要があります。

foo <- function(func,parm){
    return(do.call(func, parm))
}

これはfuncの引数で呼び出されparmます。例えば:

test = function(a,b) return(a+b)
> test(1,2)
[1] 3
> do.call(test, list(1,2))
[1] 3
于 2013-09-14T13:09:29.137 に答える