Хобрук: Ваш путь к мастерству в программировании

запустить функцию в течение указанного времени в R

Я пытаюсь заставить функцию работать в течение определенного времени, в данный момент я пытаюсь использовать функцию system.time. Я не могу понять, как определить новую переменную, которая принимает кумулятивное значение выполняемой функции, а затем помещать ее в цикл while.

timer<-(system.time(simulated_results<-replicate(n=1,simulation(J,10000,FALSE,0.1),simplify="vector"))[3])

print(timer)

while(cumsum(timer)<15){
    print(cumsum(timer)) 
    simulated_results<-replicate(n=10000,simulation(J,10000,FALSE,0.1),simplify="vector")
}

Буду очень признателен за любую помощь!!!

r
27.01.2013

  • Вам может пригодиться evalWithTimeout() из пакета R.utils. Вот один пример того, как его можно использовать в немного более сложной ситуации, чем вы спрашиваете. 28.01.2013

Ответы:


1

Если вы хотите запустить какой-либо код в течение определенного количества секунд, вы можете попробовать следующее:

start <- as.numeric(Sys.time())
duration <- 5
results <- NULL
while(as.numeric(Sys.time())-start < duration) {
  results <- c(results, replicate(...))
}

Конечно, вы должны изменить значение duration (в секундах) и заменить replicate(...) своим кодом.

27.01.2013
  • Я только что попытался использовать ответ, предложенный Джубой, поэтому я попробовал: start ‹- as.numeric(Sys.time()) duration ‹- 5 while(as.numeric(Sys.time())-start ‹ duration ) {simated_results‹-replica(n=10000,simulation(J,10000,FALSE,0.1),s implify=vector) }, но функции не помещают свои результаты в новый вектор 28.01.2013
  • @user1987097 user1987097 В вашем коде вектор simulated_results заменяется результатом replicate() после каждой итерации, поэтому вам нужно каждый раз добавлять новые результаты к предыдущим (см. отредактированный ответ). 28.01.2013

  • 2

    Вы можете использовать подход tryCatch для этой задачи. Например, рассмотрим следующий код

    fun_test = function(test_parameter){
    
      result <- 1+test_parameter #some execution
      return(result)
    }
    time = 10 #seconds
    res <- NULL
    tryCatch({
      res <- withTimeout({
        check = fun_test(tsp)
      }, timeout = time)
    }, TimeoutException = function(ex) {
      message("Timeout. Skipping.")
    })
    

    Эта программа запустит функцию fun_test на 10 секунд. Если выполнение за это время прошло успешно, возвращается результат, иначе программа останавливается. Для получения дополнительных рекомендаций вы можете перейти по этому URL-адресу Тайм-аут команды R через что-то вроде try()

    16.04.2020
    Новые материалы

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..