ฉันทำงานกับสเปนเซอร์รี้ดครับ R ตั้งโปรแกรมภาษาด้วย ฉันกำลังพยายามสร้างเป็นวงนั้น performs ต่อไปนี้:
ขั้นที่ 1:ให้กำลังสร้างสองคนแบบสุ่มตัวเลข"เอ"และ"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.
มีใครรู้ว่าทำไมเรื่องนี้เกิดขึ้นและใครก็ได้โปรดบอกฉันว่าจะแก้ไขปัญหานี้?
ขอบคุณ!