すべてのエラー メッセージが同じファイルにリダイレクトされるように、マルチセッション並列処理で R コードを実行しようとしています。ただし、 はsink()
作成できません。
library(parallel)
cl <- makePSOCKcluster(2)
f <- function(){
withr::with_message_sink("messages.txt", Sys.sleep(10))
}
clusterCall(cl = cl, fun = f)
## Error in checkForRemoteErrors(lapply(cl, recvResult)) :
## 2 nodes produced errors; first error: Cannot establish message sink when another sink is active.
## Calls: clusterCall -> checkForRemoteErrors
## Execution halted
編集
いくつかの回答を踏まえて、この投稿の目的を詳しく説明する必要があります。複数の並列バックエンドを備えた R パッケージであるdrakeを開発しています。今日、私は に新しいhook
引数を実装しました。これは、ユーザーが選択した関数で個々の並列ジョブをラップするmake()
だけです。私が本当に探しているのは、並列バックエンドに関係なくコンソールを無音にするものです。現在の開発バージョンのバックエンドには以下が含まれますhook
parallel::mclapply()
parallel::parLapply()
base::lapply()
parLapply()
( 1ジョブ経由)make -j
適切なMakefile
future::sequential
future::multicore
future::multisession
future.batchtools
ここにリストされているバックエンド
hook
stderr で機能するa を見つけたと思いました。
hook <- function(){
withr::with_message_sink("messages.txt", Sys.sleep(10))
}
ただし、またはバックエンドwithr::with_message_sink()
の同じファイルに複数のワーカーをシンクさせることはできません。parLapply()
future::multisession