0

すべてのエラー メッセージが同じファイルにリダイレクトされるように、マルチセッション並列処理で 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

hookstderr で機能するa を見つけたと思いました。

hook <- function(){
  withr::with_message_sink("messages.txt", Sys.sleep(10))
}

ただし、またはバックエンドwithr::with_message_sink()の同じファイルに複数のワーカーをシンクさせることはできません。parLapply()future::multisession

4

1 に答える 1