1

我正在运行多线程 R 脚本,但无法从集群生成输出。

outFun <- function()
{
  cat(sample(0:9,1));
}
require(snow)
clust <- makeCluster(4)
clusterExport(clust,"outFun")
clustFun <- function(i){outFun()}
clusterApplyLB(clust,1:8,clustFun)

我知道我看不到任何输出,outFun()因为它位于新的 R 线程中,但我希望有某种方法可以将此输出转发回主线程,以便在打印时可见。

编辑:这个问题为 Linux 机器回答了这个问题,但该解决方案不适用于 Windows。给出的解决方法是简单地使用文件输出,但我很好奇是否有人知道能够将输出实际发送回 Windows 中的主线程的解决方案。

4

1 回答 1

2

makeCluster outfile=""选项不适用于 Windows 上的 Rgui,因为 Rgui 不会将子进程的输出发送到显示窗口。但是,outfile=""它确实适用于 Rterm 程序,因为它是一个简单的控制台程序:

C:\Program Files\R\R-3.0.2\bin\i386> rterm -q
> library(parallel)
> clust <- makeCluster(4, outfile="")
starting worker pid=1596 on localhost:11862 at 09:13:30.005
starting worker pid=1192 on localhost:11862 at 09:13:30.342
starting worker pid=1616 on localhost:11862 at 09:13:30.679

“启动工作人员”消息来自工作进程,就在它们执行slaveLoop函数之前。您还应该看到执行任务的工作人员的输出:

> clusterEvalQ(clust, message("hello"))
hello
hello
hello
hello
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL
于 2013-10-14T13:29:07.677 回答