gpt4 book ai didi

r - R中并行计算的stdout和stderr

转载 作者:行者123 更新时间:2023-12-04 13:50:21 24 4
gpt4 key购买 nike

我正在使用包 parallel 进行计算。这是一个玩具示例:

library(parallel)
m = matrix(c(1,1,1,1,0.2,0.2,0.2,0.2), nrow=2)
myFun = function(x) {
if (any(x<0.5)) {
write("less than 0.5", stderr())
return(NA)
} else {
write("good", stdout())
return(mean(x))
}
}
cl = makeCluster(2, outfile="/tmp/output")
parApply(cl, m, 2, myFun)
stopCluster(cl)

问题是 stdout 和 stderr 都将被重定向到 /tmp/output输出 文件如下所示:

starting worker pid=51083 on localhost:11953 at 11:37:12.966
starting worker pid=51093 on localhost:11953 at 11:37:13.261
good
good
less than 0.5
less than 0.5

有什么方法可以分别为 stdout 和 stderr 设置两个单独的文件吗?以及如何忽略“starting worker pid=...”的前两行?

最佳答案

parallel 包不直接支持发送 stdout 和 stderr 到单独的文件,但你可以自己做:

cl = makeCluster(2)

setup = function(outfile, errfile) {
assign("outcon", file(outfile, open="a"), pos=.GlobalEnv)
assign("errcon", file(errfile, open="a"), pos=.GlobalEnv)
sink(outcon)
sink(errcon, type="message")
}

shutdown = function() {
sink(NULL)
sink(NULL, type="message")
close(outcon)
close(errcon)
rm(outcon, errcon, pos=.GlobalEnv)
}

clusterCall(cl, setup, "/tmp/output", "/tmp/errmsg")
parApply(cl, m, 2, myFun)
clusterCall(cl, shutdown)

由于“starting worker”消息在 setup 被调用之前发出,这些消息被重定向到“/dev/null”,这是 outfile 时的默认行为未指定。

关于r - R中并行计算的stdout和stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16175739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com