आर: तार्किक शर्तों का सम्मान नहीं किया जा रहा

0

सवाल

मैं काम कर रहा हूँ के साथ आर प्रोग्रामिंग भाषा है । मैं कोशिश कर रहा हूँ का निर्माण करने के लिए एक पाश करता है कि निम्न है :

  • चरण 1: रखने के लिए पैदा करने के दो यादृच्छिक संख्या "एक" और "बी" जब तक दोनों "एक" और "बी" कर रहे हैं, अधिक से अधिक से अधिक 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

उदाहरण के लिए, में से हर एक की ये पंक्तियाँ - दोनों "एक" और "बी" की तुलना में छोटे हैं 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ý
..................................................................................................................