如何在R中创建一个空矩阵并使用for循环更新它?

时间:2016-01-17 07:28:36

标签: r matrix

我认为这应该很容易,但我已经坚持了一段时间。我需要更新每个循环的矩阵,如下所示:

          r <- 4
          nlag <- 2

          for (i in 1:nlag){
            a  <- ((i-1)*r)+1
            b  <- i*r
            g  <- beta_OLS[c(a:b),1:r]
            bb <- as.vector(t(g))
          }

如何在每次循环后用g更新矩阵bb?

beta_OLS矩阵如下所示:

    [1,]  0.603443440  0.30405670 -0.002150462  0.0090527541
    [2,] -0.003498807  0.16163517  0.056313146  0.0007139815
    [3,]  0.319393118  0.13560199  1.079001883  0.0842017718
    [4,] -0.043669654 -0.92507425 -0.173706846  0.9019772828
    [5,]  0.259785125  0.04053008  0.036206682 -0.0217682012
    [6,]  0.029130279  0.13336440  0.034382991  0.0032809117
    [7,] -0.277746555 -0.25636900 -0.173245066 -0.0636151668
    [8,]  0.046002342  0.48681546  0.131194993 -0.0563989161

我希望输出在bb中看起来像这样:

每4 X 1部分叠在一起。

     0.6034
    -0.0035
     0.3195
     0.0437
     0.3041
     0.1616
     0.1356
     0.9251
    -0.0022
     0.0563
     1.0790
     0.1737
    -0.0091
    -0.0007
    -0.0842
     0.9020
     0.2598
     0.0291
    -0.2778
    -0.0460
     0.0405
     0.1334
    -0.2564
    -0.4868
     0.0362
     0.0344
    -0.1733
    -0.1312
     0.0218
    -0.0033
     0.0636
    -0.0564

在R中创建一个空矩阵需要什么,MATLAB代码就这么简单?

    bb = [];

1 个答案:

答案 0 :(得分:1)

有人已经评论过:不要在R中使用循环!花了我很长时间才学会了自己。

whatyouwant <- unlist(split(x=beta_OLS, f=c(rep(1, 4), rep(2, 4))))

这将为您提供一个命名向量。如果你不喜欢名字,你可以摆脱它们:

attributes(whatyouwant) <- NULL 

如果你真的想宣布一个空矩阵,那么它很容易bb <- matrix()