pforeachとforeach関数の戻り値の微妙な違い
親分が作ったpforeachパッケージという素晴らしく簡単にRで並列計算できるパッケージがある
通常使う分には現在提供されている機能で十分なのだが、デフォルトの戻り値の型がpforeachとforeach(pforeachのもとになったもの)で微妙に違い、ハマったのでメモ。
(GithubにIssueブン投げておいたので、近日中に改善されるはず・・・親分だし!!!)
以下のコードは私的にはlistのlistを返してほしい(foreachが望む結果)のだが、pforeachだとdata.frameのlistが返ってきてちょっと違うぞと。
> result1 <- foreach(i = 1:3) %do% { + list(df=iris[1:3, ], summary=summary(iris)) + } > class(result1[[1]]) [1] "list" > library(pforeach) > result2 <- pforeach(i = 1:3)({ + list(df=iris[1:3, ], summary=summary(iris)) + }) > class(result2[[1]]) [1] "data.frame"
pforeachでforeachと同じ結果を得るにはちょっと面倒くさくて、以下のように書く。
> defcombine <- function(a, ...) c(a, list(...)) > result3 <- pforeach(i = 1:3, .combine=defcombine, .init=list())({ + list(df=iris[1:3, ], summary=summary(iris)) + }) > class(result3[[1]]) [1] "list"
(GithubにIssueブン投げておいたので、近日中に改善されるはず・・・親分だし!!!大切なことなので二度言いました。)