连续生成多元素向量进行加法

Continuously generate a multiple element vector for addition

X 包含一个元素时,我 运行 我的程序是这样的

set.seed(333)
X <- numeric()
Y <- matrix(0, 4, 4)

for (j in 1:4) {
  for (i in 1:4) {       
    if (j == 1) {
      X[i] <- c(sample(10, 1))
      Y[j, i] <- 2*X[i]
    } else {
      X[i] <- c(sample(10, 1))
      Y[j, i] <- 5*Y[j - 1, i] + X[i]
    }
  }
}
Y

我的问题是当我的 X 包含 2 个现在由 c(sample(10, 1), sample(10, 1)) 生成的元素时如何获得 Y

用数组处理怎么样?

set.seed(333)
X <- array(0, c(4,2))
Y <- array(0, c(4, 4, 2))

for (j in 1:4) {
  for (i in 1:4) {       
    
    X[i, 1:2] <- sample(10, 2, replace = TRUE)
    
    if (j == 1)  Y[j, i, 1:2] <- 2*X[i, 1:2]
    else         Y[j, i, 1:2] <- 5*Y[j - 1, i, 1:2] + X[i, 1:2]
    
  }
}

Y
#> , , 1
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]   18    4    4    6
#> [2,]   97   21   30   34
#> [3,]  494  108  156  171
#> [4,] 2475  550  781  858
#> 
#> , , 2
#> 
#>      [,1] [,2] [,3] [,4]
#> [1,]   14   14   12   14
#> [2,]   78   77   66   76
#> [3,]  396  391  333  390
#> [4,] 1990 1959 1670 1959

请注意,这里有您要找的夫妇:

Y[1,1,]
#> [1] 18 14
Y[1,2,]
#> [1]  4 14
Y[1,3,]
#> [1]  4 12
Y[1,4,]
#> [1]  6 14

Y[2,1,]
#> [1] 97 78
Y[2,2,]
#> [1] 21 77
Y[2,3,]
#> [1] 30 66
Y[2,4,]
#> [1] 34 76

Y[3,1,]
#> [1] 494 396
Y[3,2,]
#> [1] 108 391
Y[3,3,]
#> [1] 156 333
Y[3,4,]
#> [1] 171 390

Y[4,1,]
#> [1] 2475 1990
Y[4,2,]
#> [1]  550 1959
Y[4,3,]
#> [1]  781 1670
Y[4,4,]
#> [1]  858 1959

我从 if-else 中取出了 X,因为你不会这样做。

另外:sample(10, 2, replace = TRUE) 等同于 c(sample(10, 1), sample(10, 1)),但更短。