如何传递函数及其向量参数列表?

时间:2013-09-14 13:05:41

标签: r

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

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不接受参数列表,但是如何接受 将参数列表传递给函数?希望这不会太混乱。感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分: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