[BioC] snow library, question on clusterExport

Pavelka, Norman NXP at stowers.org
Sun Apr 11 17:49:07 CEST 2010


Hi Mattia,

Maybe I'm not getting what you're trying to do, but shouldn't your fun3 be using object 'data' rather than 'Mat' internally?

HTH ;-)
Norman

#  Hi,
#
#  I have a simple function:
#
#  > library(snow)
#  > fun2=function() {
#  + cl=makeCluster(3)
#  + Mat=matrix(2:10,3,3)
#  + fun3=function(startInd, endInd=3, data=Mat) {Mat[startInd:endInd,]}
#  + print(clusterApplyLB(cl, 1:3, fun3))
#  + stopCluster(cl)
#  + }
#
#  that is working fine:
#
#  > fun2()
#  [[1]]
#       [,1] [,2] [,3]
#  [1,]    2    5    8
#  [2,]    3    6    9
#  [3,]    4    7   10
#
#  [[2]]
#       [,1] [,2] [,3]
#  [1,]    3    6    9
#  [2,]    4    7   10
#
#  [[3]]
#  [1]  4  7 10
#
#  now, if I run the same commands outside the function:
#
#  > cl=makeCluster(3)
#  > Mat=matrix(2:10,3,3)
#  > fun3=function(startInd, endInd=3, data=Mat) {Mat[startInd:endInd,]}
#  > print(clusterApplyLB(cl, 1:3, fun3))
#  Error in checkForRemoteErrors(val) :
#    3 nodes produced errors; first error: object 'Mat' not found
#
#  so I figured out I have to export 'Mat' on the cluster nodes:
#
#  > clusterExport(cl, 'Mat')
#  > print(clusterApplyLB(cl, 1:3, fun3))
#  [[1]]
#       [,1] [,2] [,3]
#  [1,]    2    5    8
#  [2,]    3    6    9
#  [3,]    4    7   10
#
#  [[2]]
#       [,1] [,2] [,3]
#  [1,]    3    6    9
#  [2,]    4    7   10
#
#  [[3]]
#  [1]  4  7 10
#
#  I still do not understand why clusterExport is NOT necessary within
#  the function 'fun2' and actually it would give an error:
#
#  > rm(Mat)
#  > fun2=function() {
#  + cl=makeCluster(3)
#  + Mat=matrix(2:10,3,3)
#  + clusterExport(cl, 'Mat')
#  + fun3=function(startInd, endInd=3, data=Mat) {Mat[startInd:endInd,]}
#  + print(clusterApplyLB(cl, 1:3, fun3))
#  + stopCluster(cl)
#  + }
#  > fun2()
#  Error in get(name, env = .GlobalEnv) : object 'Mat' not found
#
#
#  I found clusterExport to be the solution for a more complex example,
#  can I can't make it working within a function.
#  What is it happening here with clusterExport? and how can I export an
#  object that is not on my globalEnv but rather is created within a
#  function?
#
#  many thanks!
#
#  mattia
#
#  > sessionInfo()
#  R version 2.10.1 (2009-12-14)
#  x86_64-unknown-linux-gnu
#
#  locale:
#   [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
#   [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
#   [5] LC_MONETARY=C              LC_MESSAGES=en_US.UTF-8
#   [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
#   [9] LC_ADDRESS=C               LC_TELEPHONE=C
#  [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
#
#  attached base packages:
#  [1] stats     graphics  grDevices utils     datasets  methods   base
#
#  other attached packages:
#  [1] snow_0.3-3


More information about the Bioconductor mailing list