【问题标题】:Continuously generate a multiple element vector for addition连续生成多元素向量进行加法
【发布时间】:2020-10-10 05:44:45
【问题描述】:

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 包含现在用c(sample(10, 1), sample(10, 1)) 生成的2 个元素时,如何获取Y

【问题讨论】:

    标签: r vector addition


    【解决方案1】:

    用数组处理怎么样?

    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)),但更短。

    【讨论】:

    • 我想生成 4 个不同的 X 向量,每个向量包含 2 个元素,并使用它们每次获得 4 个不同的 Y 向量。手动操作,我想要类似这个例子# j=1, # X11=(7,8) X12=(2,6) X13=(1,9) X14=(5,5) # Y11=(14,16) Y12=(4,12) Y13=(2,18) Y14=(10,10) # j=2, # X21=(1,2) X22=(2,3) X23=(1,7) X24=(3,9) # Y21=5*Y11+X21=(71,82) Y22=5*Y12+X22=(22,63) 跨度>
    • Y 必须是矩阵/数组吗?
    • 这正是我所需要的。谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2017-08-11
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多