oba*_*tos 13 r rstudio mclapply
我使用mclapply从内部RStudio,想有一个输出到每个流程控制台但这似乎以某种方式抑制(如提及例如这里:是mclapply保证返回其为了结果?).我怎么能让R Studio打印出像这样的东西
x <- mclapply(1:20, function(i) cat(i, "\n"))
到控制台?
我已经尝试过print(),cat(),write(),但它们似乎都没有用.我也尝试mc.silent = FALSE明确设置没有效果.
far*_*nsy 10
使用GUI进行并行处理是有问题的.我写了很多并行代码,并且它经常崩溃我的同事的计算机,因为他坚持使用Rstudio而不是控制台R.
从我读到的,RStudio"不会将分叉进程的输出传播到RStudio控制台.如果你这样做,最好通过shell启动R."
这对于RStudio人来说是有意义的,因为当人们尝试从一堆不同的进程输出到GUI时,并行处理通常会破坏GUI.它在控制台中工作(虽然通常不按顺序),但并行处理大师在听到来自分叉线程的任何I/O时会捏他们的鼻子.
如果必须具有分叉线程的输出,请将它们保存在字符串中并返回它.然后从主进程收集并输出.或者只是使用控制台进行并行运行.我告诉我的同事使用RStudio进行所有调试和开发lapply(),然后切换到实际运行的控制台.
以下是使用 shellecho打印到 Rstudio 中的 R 控制台的解决方法:
#' 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="")))
}
Run Code Online (Sandbox Code Playgroud)