Hi,

This is my first message to this list. It would be great if people here could help me with the following problem (self-contained code example below):

I have a list of matrices and would like to apply a summary function to the matrices in the list. The matrices represent social networks, therefore I need to apply some specialized summary functions provided by the ergm package. These summary statistics are contained in a summary method. I can write a function as a wrapper around this summary method and use lapply to apply the function to the list of matrices. This gives me the result I want:

      [,1] [,2] [,3] [,4] [,5]
edges   94   94   94   94   94
dsp1   227  227  227  227  227

However, when I try to parallelize this by using parLapply or parSapply from the parallel package, the results look weird:

       [,1]      [,2]      [,3]      [,4]      [,5]
Length "3"       "3"       "3"       "3"       "3"
Class  "formula" "formula" "formula" "formula" "formula"
Mode   "call"    "call"    "call"    "call"    "call"

And when I export summary.statistics, which is used inside my wrapper function, I get an error message:

Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: could not find function "summary.statistics"

Do I have to export the summary method that is provided by the ergm package to the cluster object? If so, how? The following code is a self-contained example.

##########

library("ergm")
library("parallel")

# create list of matrices
m <- matrix(rbinom(900, 1, 0.1), nrow = 30)
l <- list(m, m, m, m, m)

# write wrapper function that computes results
fun <- function(mat) {
  s <- summary(mat ~ edges + dsp(1))
  return(s)
}

cl <- makePSOCKcluster(2)  # create cluster object

test1 <- sapply(l, fun)  # works!
test2 <- parSapply(cl, l, fun)  # problem: results look weird!

clusterExport(cl, varlist = "summary.statistics")
test3 <- parSapply(cl, l, fun)  # error!

##########

I found a solution somewhere in a forum:

clusterCall(cl, function() library("ergm"))

However, as I'd like to use the code in a package, the CRAN check tells me that using library calls inside a package is uncool. So I guess there must be another solution?

Thanks in advance for any hints.

Best,
Philip

(University of Bern)

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to