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ブン投げておいたので、近日中に改善されるはず・・・親分だし!!!大切なことなので二度言いました。)

追記

result2 <- pforeach(i = 1:3, .c=list)({
  list(df=iris[1:3, ], summary=summary(iris))
})

でOKだった。