簡體   English   中英

如何將嵌套for循環的output放入R中的向量中?

[英]How do I put the output of a nested for loop into a vector in R?

我是一個新的 R 程序員,我正在嘗試隨機生成 p*q 個隨機數。 我有以下代碼:

 for (i in 1:p){     
   for (j in 1:q){       
     X_ij <- rnorm( 1, mu , 1)       
     print(X_ij)     
   }   
}

以 p=2 和 q=3 為例,此代碼將打印 6 個值。 我如何將它們放入向量中?

我嘗試執行以下操作:

for (i in 1:p){ 
    for (j in 1:q){
     X_ij <- rnorm( 1, mu , 1)
     x_ij_vector <- c(X_ij, X_ij)
    }
}

我認為這可能會創建一個 X_ijs 向量,但它沒有。

您可以初始化向量v和運行索引u並迭代填充它。

v <- numeric(p*q)
u <- 0
set.seed(42)  ## for sake of reproducibility

for (j in 1:q) { 
  for (i in 1:p) {
    u <- u + 1
    v[u] <- rnorm(1, mu, 1)
  }
}

v
# [1]  1.3709584 -0.5646982  0.3631284  0.6328626  0.4042683 -0.1061245

不過, whilerepeat循環可能更適合這里。

v <- numeric(p*q)
u <- 0
set.seed(42)

repeat {
  u <- u + 1
  v[u] <- rnorm(1, mu, 1)
  if (u == p*q) break
}

v
# [1]  1.3709584 -0.5646982  0.3631284  0.6328626  0.4042683 -0.1061245

也許你想要一個矩陣?

X <- matrix(NA_real_, p, q)  ## initialize empty matrix

p <- 2; q <- 3; mu <- 0
set.seed(42)

for (j in 1:q) { 
  for (i in 1:p) {
    X[i, j] <- rnorm(1, mu, 1)
  }
}

X
#            [,1]      [,2]       [,3]
# [1,]  1.3709584 0.3631284  0.4042683
# [2,] -0.5646982 0.6328626 -0.1061245

請注意,矩陣通常應逐列填充。

但是,正如評論中所述,對於 R 中隨機向量/矩陣的唯一生成,不需要循環:

set.seed(42)
rnorm(p*q, mu, 1)
# [1]  1.3709584 -0.5646982  0.3631284  0.6328626  0.4042683 -0.1061245

set.seed(42)
matrix(rnorm(p*q, mu, 1), p, q)
#            [,1]      [,2]       [,3]
# [1,]  1.3709584 0.3631284  0.4042683
# [2,] -0.5646982 0.6328626 -0.1061245

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM