2

我正在尝试在 R 中编写一个函数,它将作为参数、第二个函数及其参数,其中一些是向量。我想要的最终结果是编写一个滚动函数,该函数调用一个函数来作用于时间序列,但是我已经尝试了所有我能想到的“应用”函数排列,但没有成功,因为“应用”函数似乎都逐个元素地将函数应用于向量,我想要将函数作为一个整体应用于向量。例如,

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

并且能够沿时间序列滚动函数。我还尝试编写一个包含第二个函数及其参数作为参数的通用函数,但我似乎无法让它接受参数。例如,

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 回答