1.まずはfor文でいったん処理を書き下す
for (i in 引数) {
(処理)
}
2.for文のiterationを引数に持つ関数に書き換える
関数 <- function(i = 引数) {
(処理)
}
3.future_mapに2の関数を埋め込む
future::plan(future::multisession)
furrr::future_map_AA(
.x = 引数,
.f = ~ 関数(i = .x),
.options = furrr::furrr_options(seed = 1L)
)
future::plan(future::sequential)
_AAの部分は欲しいデータ出力型に合わせて変更。例えば、並列化した出力結果をbind_rowsで結合した状態がお望みなら、future_map_dfrとすればよい。
注意点としては、ときおりfuture_map内にlibraryがマウントされないことがあるっぽい。。for文のときはうまくいった処理が、future_mapにしたとたん処理が進まなくなるのは、このパターンが多い印象。
そのときは
・しっかりエラー文を読む
・future_map内の処理をいったん区切って処理不可の原因を切り分ける
・future_map内でlibraryを明示的に読み込む(pacman::p_load()とか)
あたりをすれば大体解決した。
3つ目のエラーとよく関連するエラー文
Error in UseMethod("predict") :
'predict' をクラス "c('glmnet')" のオブジェクトに適用できるようなメソッドがありません
こんなエラーがでたら、関数のなかでpacman::p_load('glmnet')でOK
libraryが競合するときにエラーが多い気がする。
`conflicted::conflict_prefer_all(winner = 'dplyr')`
などでlibrary間の順位関係を決めてしまえばよさそう。