首页 > 解决方案 > 向量化两个参数函数

问题描述

我有两个滞后的协方差函数类型:h1 和 h2。我试图避免 for 循环来创建协方差函数矩阵。当我输入 cov1 时,它没有给我一个矩阵。例如,如果我键入,则只是一个向量covmatrix(h1=1:5,h2=1:5)。例如,我如何获得整个 5 x 5 矩阵。

我尝试了所有应用函数和新的矢量化函数(小写 v)

代码:

x=arima.sim(n = 100   , list(ar = .5))
cov=function(h1,h2){
     (1/n)*sum((x[1:(n-h1-h2)]-mean(x))*(x[(1+h1):(n-h2)]-mean(x))*(x[(1+h1+h2):n]-mean(x)))
}
covmatrix=Vectorize(cov)

标签: rvectorization

解决方案


一个简单的双倍apply应该可以得到你想要的东西。请注意向量化函数的返回值如何等于 covmatrix 的对角线。

test <- sapply(1:5, function(x) sapply(1:5, function(y) cov(x, y)))
all.equal(diag(test), covmatrix(1:5, 1:5))

推荐阅读