雪で作られた並列クラスターの下で igraph によって生成されたスパース行列を操作しようとしていますが、行列の合計を取得したり、 which(element > 0) のような操作を行ったりするなどの操作は、非要素であっても機能しないようです-パラレルバージョンはそうです。これは私がやろうとしていることの簡単な例です:
library(igraph)
library(snow)
set.seed(123)
random_graph <- as_adjacency_matrix(erdos.renyi.game(100,0.1))
n_edges <- function(random_graph){
return(sum(random_graph))
}
n_parallel <- 4
cl <- makeCluster(n_parallel)
clusterExport(cl,ls(),environment())
foo <- parSapply(cl,1:10,function(n){
return(n_edges(random_graph))
})
これを実行すると、次のエラーが返されます
Error in checkForRemoteErrors(val) :
4 nodes produced errors; first error: invalid 'type' (S4) of argument
ただし、これは機能します。
> n_edges(random_graph)
[1] 948
すべてをクラスターにエクスポートしたので、データ構造が何らかの方法で異なる方法で処理されるのは非常に奇妙です。私は何が欠けていますか?