R 无需等待即可提示用户
我有一个长时间运行的流程,代码是“R”。我想继续在RStudio中运行它,我不想使用批处理模式 我希望允许用户优雅地终止长时间运行的进程,例如按escape键。如果用户没有按任何键,则该过程将继续,无需等待 我读过其他StackOverflow文章,也许我需要在不同的线程上提示用户使用scan/readline。这样,主执行线程就不会被阻塞 难道没有更简单的方法吗 谢谢你的指点/建议 理查德·罗杰斯R 无需等待即可提示用户,r,rstudio,R,Rstudio,我有一个长时间运行的流程,代码是“R”。我想继续在RStudio中运行它,我不想使用批处理模式 我希望允许用户优雅地终止长时间运行的进程,例如按escape键。如果用户没有按任何键,则该过程将继续,无需等待 我读过其他StackOverflow文章,也许我需要在不同的线程上提示用户使用scan/readline。这样,主执行线程就不会被阻塞 难道没有更简单的方法吗 谢谢你的指点/建议 理查德·罗杰斯 进一步评论: 我犯了一些错误: 我没有意识到在RStudio中按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进程,但允许用户继续编码以及停止/重新启动它。在这种(开发)模式下,它不打算在批处理模式下运行(它有一个更健壮的生产环境模型)。有很多源代码需要通读,但它是可以做到的。(很抱歉,我不能提供“包含这些代码行”。)除此之外,编写代码以便足够频繁地保存状态并可以中断/继续(如果需要)可能是您的最佳选择。