提示用户无需等待

时间:2015-06-10 15:46:42

标签: r rstudio

我有一个长时间运行的过程,用“R”编码。我想继续在RStudio中运行它,我不想使用批处理模式。

我想允许用户优雅地终止长时间运行的进程,例如按下转义键。如果用户没有按任何内容,则该过程继续,无需等待。

我已阅读其他StackOverflow帖子,也许我需要在不同的线程上提示用户使用scan / readline。这样,主执行线程就不会被阻止。

有没有更简单的方法?

感谢您提出任何建议。

理查德罗杰斯

进一步评论:

我犯了一些错误:

  1. 我没有意识到代码是在RStudio中按下转义     停止执行。
  2. 当我按下逃跑时,我似乎无法确定执行的结束位置。
  3. 也许我可以使用更简单的问题。
  4. 这是一个简单的功能:

    ProcessData <- function()
    {
        Continue <- TRUE
        Iteration <- 1
    
        TestData <- vector(mode = "integer", length = 100000)
    
        while (Continue)
        {
            writeLines(sprintf("Processing iteration %d, Current time is %s", Iteration, Sys.time()))
            process.events()
    
            TestData <- round(runif(100000, min = 1, max = 10))
            # Continue <- PromptUser()
    
            Iteration <- Iteration + 1
        }
    
        writeLines("Processing ending.")
        head(TestData)
    }
    

    如果我在循环运行时按下escape,则不会执行writeLines和head调用。我怎样才能确保他们这样做?

    再次感谢你,

    理查德

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但由于我有类似的背景(长期运行的任务),这就是我想出的:

long_computation <- function() for(i in 1:10) Sys.sleep(1) 
exit_gracefully <- function() cat("Saving results so far...\n")
tryCatch(
    long_computation(),  
    finally = exit_gracefully()
)

如果我们在计算过程中按下escape,则不会抛出错误条件;但是finally的{​​{1}}部分会被执行。这允许我们清理,关闭连接等。