สเปนเซอร์รี้ดครับ R:มีเหตุผลเงื่อนไขไม่ได้รับการเคารพ

0

คำถาม

ฉันทำงานกับสเปนเซอร์รี้ดครับ 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.

มีใครรู้ว่าทำไมเรื่องนี้เกิดขึ้นและใครก็ได้โปรดบอกฉันว่าจะแก้ไขปัญหานี้?

ขอบคุณ!

data-manipulation loops r while-loop
2021-11-24 02:45:09
1

คำตอบที่ดีที่สุด

4

ยังไงเรื่องแบบนี้เหรอ? อย่างที่คุณป้ายกำกับ 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
2021-11-24 02:52:21

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่