[R-sig-hpc] Error in UseMethod("stopCluster") : no applicable method for 'stopCluster' ...

Martin Morgan mtmorgan at fhcrc.org
Fri Sep 21 18:26:35 CEST 2012


On 09/21/2012 12:47 AM, Marius Hofert wrote:
> Dear expeRts,
>
> If I run the minimal example below, I obtain:
>
> Loading required package: Rmpi
> Loading required package: grDevices
> Loading required package: grDevices
> Loading required package: grDevices
> Loading required package: grDevices
> 	4 slaves are spawned successfully. 0 failed.
> Error in UseMethod("stopCluster") :
>    no applicable method for 'stopCluster' applied to an object of class "c('spawnedMPIcluster', 'MPIcluster', 'cluster')"
>
> However, if I run the body of the function (linewise; without calling the
> function), everything works. Why is that so?
>
> Cheers,
>
> Marius
>
>
> grid <- expand.grid(a=1:4, b=2:10)
> ngrid <- nrow(grid)
> f <- function(x) sum(x)
>
> ex <- function() {
>      cl <- snow::makeCluster(parallel::detectCores(), type="MPI")
>      on.exit(snow::stopCluster(cl))
>      RNGkind("L'Ecuyer-CMRG")
>      parallel::clusterExport(cl, varlist=c("f", "grid"))
>      parallel::clusterApply(cl, seq_len(ngrid), function(i) f(grid[i,]))
> }
>
> res <- ex()

An even more minimal example is

   ex <- function() {
       cl <- snow::makeCluster(parallel::detectCores(), type="MPI")
       snow::stopCluster(cl)
   }
   res <- ex()

To be clear, there is no library(snow) in the script, and on.exit() is 
not relevant. The reason is that snow::stopCluster is an S3 generic, and 
on the help page ?NextMethod we have


      Namespaces can register methods for generic functions.  To support
      this, 'UseMethod' and 'NextMethod' search for methods in two
      places: first in the environment in which the generic function is
      called, and then in the registration data base for the environment
      in which the generic is defined (typically a namespace).  So
      methods for a generic function need to be available in the
      environment of the call to the generic, or they must be
      registered.  (It does not matter whether they are visible in the
      environment in which the generic is defined.)

There are no stopCluster methods defined in the calling namespace (i.e., 
your script) and since there has been no call to library(snow), there is 
no snow namespace to search and hence no method to be found.

The solution is to add

   library(snow)

to the script (or better library(parallel) and use the 'parallel' 
library throughout).

Martin


>
> _______________________________________________
> R-sig-hpc mailing list
> R-sig-hpc at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-hpc
>


-- 
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793



More information about the R-sig-hpc mailing list