在两个参数的函数上运行的矢量化函数

时间:2019-05-19 08:53:51

标签: r vectorization

我有两个参数的函数(具有两个滞后的自动协方差函数)进行矢量化,但是我无法以矩阵的形式获得此参数的输出。我试图避免for循环和各种应用功能。

我正在尝试Vectorizevectorize(新的)。例如,我想要一个5 x 5的协方差矩阵。当我输入

covmatrix(h1 = 1:5, h2 = 1:5) 

我只得到对角线,而不是整个矩阵。

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)

我期望矩阵作为输入是两个参数的函数。

1 个答案:

答案 0 :(得分:2)

您呼叫covmatrix的方式产生了正确的结果,而不是您所期望的。该呼叫等效于

covmatrix(h1 = 1, h2 = 1)
covmatrix(h1 = 2, h2 = 2)

等等。
为两个参数的每个组合调用函数的正确方法是使用outer

outer(1:5, 1:5, covmatrix)
#            [,1]         [,2]         [,3]         [,4]        [,5]
#[1,] -0.41601317 -0.370097057 -0.124465470 -0.047267383  0.11745561
#[2,] -0.47072758 -0.272059262 -0.029614627  0.088643875  0.02381160
#[3,] -0.30116584 -0.258246136 -0.061882282  0.090978006 -0.05854558
#[4,] -0.08414056 -0.066622517  0.008072885 -0.035487867 -0.06632959
#[5,]  0.18854949 -0.003135701 -0.160137172  0.008353789 -0.18484782

数据生成代码。

我将重复数据生成代码,但这一次设置RNG种子。

set.seed(1234)
x <- arima.sim(n = 100, list(ar = 0.5))

此外,在这个问题上,您还缺少n <- 100