R: Mantıksal Koşullara Uyulmaması

0

Soru

R programlama dili ile çalışıyorum. Aşağıdakileri gerçekleştiren bir döngü oluşturmaya çalışıyorum :

  • Adım 1: Hem "a" hem de "b" 12'den büyük olana kadar iki rasgele sayı "a" ve "b" üretmeye devam edin

  • Adım 2: 1. Adım tamamlanana kadar kaç rasgele sayı üretilmesi gerektiğini takip edin

  • Adım 3: Adım 1 ve Adım 2'yi 100 kez tekrarlayın

Bir koşul karşılanana kadar rasgele sayılar üretmeye nasıl devam edeceğimi bilmediğimden, koşulun karşılandığını umarak büyük miktarda rasgele sayı üretmeye çalıştım (muhtemelen bunu yazmanın daha iyi bir yolu vardır):

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)

Sorun: ne Zaman I bakmak sonuçları, ben fark bu döngü yanlış düşünüyor koşul için bir araya geldi mesela:

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

Örneğin, bu satırların her birinde-hem "a" hem de "b" 12'den küçüktür.

Kimse bunun ve lütfen birisi bu sorunu çözmek için nasıl bana göster neden biliyor mu?

Teşekkürler!

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

En iyi cevabı

4

Bu tarafa ne dersin? Etiketlediğiniz gibi while-loop Kullanmayı denedim.

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

Diğer dillerde

Bu sayfa diğer dillerde

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