并行计算可以加快一些耗时流程的分析,但 R 如果调用如 mclapply()
等进行并行计算, 无法输出调用函数内部的打印信息,这里有一个小技巧,记录一下。
构建一个新的消息函数,在调用函数内部进行使用,用来打印提示信息。
#' Function which prints a message using shell echo; useful for printing messages from inside mclapply when running in Rstudio
<- function(...){
message_parallel system(sprintf('echo "\n%s\n"', paste0(..., collapse="")))
}
这里多个
\n
可根据情况进行去除。
mcprogress
找到一个包mcprogress可以直接解决这个问题。
library(mcprogress)
# toy example
<- pmclapply(letters[1:20], function(i) {
res Sys.sleep(0.2 + runif(1) * 0.1)
setNames(rnorm(5), paste0(i, 1:5))
mc.cores = 2, title = "Working") },
最核心的输出技术还是和上面的函数是相同的。
参考:https://stackoverflow.com/questions/17345837/printing-from-mclapply-in-r-studio