R 无需等待即可提示用户

R 无需等待即可提示用户,r,rstudio,R,Rstudio,我有一个长时间运行的流程,代码是“R”。我想继续在RStudio中运行它,我不想使用批处理模式 我希望允许用户优雅地终止长时间运行的进程,例如按escape键。如果用户没有按任何键,则该过程将继续,无需等待 我读过其他StackOverflow文章,也许我需要在不同的线程上提示用户使用scan/readline。这样,主执行线程就不会被阻塞 难道没有更简单的方法吗 谢谢你的指点/建议 理查德·罗杰斯 进一步评论: 我犯了一些错误: 我没有意识到在RStudio中按escape键时代码是 运行会

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

我希望允许用户优雅地终止长时间运行的进程,例如按escape键。如果用户没有按任何键,则该过程将继续,无需等待

我读过其他StackOverflow文章,也许我需要在不同的线程上提示用户使用scan/readline。这样,主执行线程就不会被阻塞

难道没有更简单的方法吗

谢谢你的指点/建议

理查德·罗杰斯


进一步评论:

我犯了一些错误:

  • 我没有意识到在RStudio中按escape键时代码是 运行会停止执行
  • 当我按下escape时,我似乎无法确定执行在哪里结束
  • 也许我可以用一个更简单的问题
  • 下面是一个简单的函数:

    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)
    }
    

    ProcessData我知道这是一个老问题,但由于我有一个类似的上下文(长时间运行的任务),我想到了以下几点:

    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()
    )
    

    long\u计算您的进程是否应该在后台运行?除非您正在执行任何类型的多重R进程处理,否则我认为
    ESC
    是您将被限制的功能。R使用了一种交互模式,因此如果您试图避免启动两个进程,一个用来管理另一个进程,我认为这样的常规用户中断是唯一的方法。虽然不是一个简单的例子,()在后台启动一个单独的R进程,但允许用户继续编码以及停止/重新启动它。在这种(开发)模式下,它不打算在批处理模式下运行(它有一个更健壮的生产环境模型)。有很多源代码需要通读,但它是可以做到的。(很抱歉,我不能提供“包含这些代码行”。)除此之外,编写代码以便足够频繁地保存状态并可以中断/继续(如果需要)可能是您的最佳选择。