首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R Studio中从mclapply打印

在R Studio中从mclapply打印
EN

Stack Overflow用户
提问于 2013-06-27 22:26:01
回答 3查看 4.3K关注 0票数 17

我在RStudio中使用mclapply,希望每个进程都能输出到控制台,但这似乎被抑制了(例如,这里提到的:Is mclapply guaranteed to return its results in order?)。我怎样才能让R Studio打印出像这样的东西

x <- mclapply(1:20, function(i) cat(i, "\n"))

到控制台?

我尝试过print()、cat()、write(),但它们似乎都不起作用。我还尝试显式地设置mc.silent = FALSE,但没有任何效果。

EN

回答 3

Stack Overflow用户

发布于 2014-08-05 03:54:49

使用GUI的并行处理是有问题的。我写了很多并行代码,它经常使我同事的计算机崩溃,因为他坚持使用Rstudio而不是控制台R。

据我所知,RStudio“不会将派生进程的输出传播到RStudio控制台。如果要这样做,最好通过shell启动R。”

这对于RStudio人员来说是有意义的,因为当人们试图从一堆不同的进程输出到图形用户界面时,并行处理通常会破坏图形用户界面。它可以在控制台中工作(尽管通常不是按顺序进行的),但是当并行处理专家听说来自分支线程的任何I/O时,他们会感到很恼火。

如果必须有派生线程的输出,请将它们保存在字符串中并返回。然后从主进程中收集并输出。或者只使用控制台进行并行运行。我告诉我的同事,使用lapply()在RStudio中完成所有的调试和开发,然后切换到控制台进行实际运行。

票数 12
EN

Stack Overflow用户

发布于 2020-08-12 16:25:32

以下是使用shell echo打印到Rstudio中R控制台的解决方法:

代码语言:javascript
复制
#' Function which prints a message using shell echo; useful for printing messages from inside mclapply when running in Rstudio
message_parallel <- function(...){
  system(sprintf('echo "\n%s\n"', paste0(..., collapse="")))
}
票数 3
EN

Stack Overflow用户

发布于 2015-06-20 08:01:49

只是稍微扩展一下请求者使用的解决方案,即写入文件以检查进度:

代码语言:javascript
复制
write.file = '/temp_output/R_progress'

time1 = proc.time()[3]
outstuff = unlist(mclapply(1:1000000, function(i){
  if (i %% 1000 == 0 ){
    file.create(write.file)
    fileConn<-file(write.file)
    writeLines(paste0(i,'/',nrow(loc),' ',(i/nrow(loc)*100)), fileConn)
    close(fileConn)
  }
  #do your stuff here
}, mc.cores=6))
print(proc.time()[3] - time1)

然后,您可以通过控制台进行监控

tail -c +0 -f '/temp_output/R_progress'

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17345837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档