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