Использование цикла R while для генерации случайных величин

Я хочу сгенерировать случайную величину X, продолжая генерировать U(0,1) случайных величин, пока их произведение падает ниже exp(-2). Тогда моя случайная величина X будет равна количеству сгенерированных случайных величин U(0,1) минус 1.
Я попытался использовать цикл while для этого, но не уверен, почему код ничего не возвращает в моей консоли. Пожалуйста, помогите мне указать, что я сделал неправильно?

p <- 1
counter <- 0

while(p < exp(-2)) {
  u <- runif(1)
  p <- p*u
  counter <- counter+1

  X <- counter - 1
  print(X)
}

Зачем использовать p, если это всегда 1?

Maël 17.05.2022 09:10

Это не работает, потому что большую часть времени ваш цикл прерывается при первом условии, поскольку вероятность того, что runif(1) < exp(-2) на самом деле равна exp(-2), довольно мала. Ваш цикл не имеет смысла как есть.

Maël 17.05.2022 09:19
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
2
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновить

Если вы хотите воспроизвести процесс в 100 раз, вы можете использовать replicate

replicate(
    100,
    {
        p <- 1
        counter <- 0
        repeat {
            p <- p * runif(1)
            counter <- counter + 1
            if (p < exp(-2)) {
                break
            }
        }
        counter
    }
)

Я думаю, вы могли бы использовать repeat с условием p < exp(-2)

p <- 1
counter <- 0
repeat {
    print(counter)
    p <- p * runif(1)
    counter <- counter + 1
    if (p < exp(-2)) {
        print(counter)
        break
    }
}

@ThomaslsCoding Спасибо! Это сработало. Однако я сталкиваюсь с другой проблемой, используя ваш код в тех случаях, когда мне нужно сгенерировать несколько случайных переменных X, а не только один X. Любое предложение о том, как я мог бы это преодолеть?

NganKD 17.05.2022 09:34

@NganKD Смотрите обновление

ThomasIsCoding 17.05.2022 09:38

@ThomaslsCoding И это отлично работает! Никогда не используйте функции репликации и повтора раньше, это полезно знать. Спасибо. Ваше здоровье!

NganKD 17.05.2022 09:43

Другие вопросы по теме