连续生成用于添加的多元素向量

问题描述

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,i] <- 5*Y[j - 1,i] + X[i]
    }
  }
}
Y

我的问题是,当我的Y包含2个通过X生成的元素时,如何获取c(sample(10,1),sample(10,1))

解决方法

如何用数组处理它?

set.seed(333)
X <- array(0,c(4,2))
Y <- array(0,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,1:2] <- 5*Y[j - 1,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
#> 
#>      [,]   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,]
#> [1]  4 14
Y[1,3,]
#> [1]  4 12
Y[1,]
#> [1]  6 14

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

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

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

我从if-else中取出了X,因为您无论如何都不会这样做。

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