我正在使用 R 編程語言。我正在嘗試構建一個執行以下操作的回圈:
步驟1:不斷生成兩個亂數“a”和“b”,直到“a”和“b”都大于12
第 2 步:跟蹤在完成第 1 步之前必須生成多少亂數
步驟 3:重復步驟 1 和步驟 2 100 次
由于我不知道如何在滿足條件之前一直生成亂數,因此我嘗試生成大量亂數希望滿足條件(可能有更好的寫法):
results <- list()
for (i in 1:100){
# do until break
repeat {
# repeat many random numbers
a = rnorm(10000,10,1)
b = rnorm(10000,10,1)
# does any pair meet the requirement
if (any(a > 12 & b > 12)) {
# put it in a data.frame
d_i = data.frame(a,b)
# end repeat
break
}
}
# select all rows until the first time the requirement is met
# it must be met, otherwise the loop would not have ended
d_i <- d_i[1:which(d_i$a > 10 & d_i$b > 10)[1], ]
# prep other variables and only keep last row (i.e. the row where the condition was met)
d_i$index = seq_len(nrow(d_i))
d_i$iteration = as.factor(i)
e_i = d_i[nrow(d_i),]
results[[i]] <- e_i
}
results_df <- do.call(rbind.data.frame, results)
問題:當我查看結果時,我注意到回圈錯誤地考慮了要滿足的條件,例如:
head(results_df)
a b index iteration
4 10.29053 10.56263 4 1
5 10.95308 10.32236 5 2
3 10.74808 10.50135 3 3
13 11.87705 10.75067 13 4
1 10.17850 10.58678 1 5
14 10.14741 11.07238 1 6
例如,在這些行中的每一行中——“a”和“b”都小于 12。
有誰知道為什么會發生這種情況,有人可以告訴我如何解決這個問題嗎?
謝謝!
uj5u.com熱心網友回復:
這條路怎么樣?當您標記 時while-loop,我嘗試使用它。
res <- matrix(0, nrow = 0, ncol = 3)
for (j in 1:100){
a <- rnorm(1, 10, 1)
b <- rnorm(1, 10, 1)
i <- 1
while(a < 12 | b < 12) {
a <- rnorm(1, 10, 1)
b <- rnorm(1, 10, 1)
i <- i 1
}
x <- c(a,b,i)
res <- rbind(res, x)
}
head(res)
[,1] [,2] [,3]
x 12.14232 12.08977 399
x 12.27158 12.01319 1695
x 12.57345 12.42135 302
x 12.07494 12.64841 600
x 12.03210 12.07949 82
x 12.34006 12.00365 782
dim(res)
[1] 100 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/368663.html
