[英]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
不過, while
或repeat
循環可能更適合這里。
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.