Windows uses separate processes that do not share memory (SnowParam()), whereas 
linux / mac by default use forked processes that share the original memory 
(MulticoreParam()). So

> y = 1
> param = MulticoreParam()
> res = bplapply(1:2, function(x) y, BPPARAM=param)

works because the function can 'see' y, whereas

> param = SnowParam()
> res = bplapply(1:2, function(x) y, BPPARAM=param)
Error: BiocParallel errors
  element index: 1, 2
  first error: object 'y' not found

fails because the new processes cannot see y. The robust way to implement this 
makes the FUN in bplapply truly functional, depending only on variables 
received as arguments

> res = bplapply(1:2, function(x, y) y, y = 1, BPPARAM=param)
>

The situation is more complicated in package code in particular and in general, 
because R sends not just FUN to the workers, but also the environment (up to 
but not including the global environment) in which the function applies. So

doit <- function() {
    y = 1
    bplapply(1:2, function(x) y, BPPARAM = SnowParam(2))
}

also works

> res = doit()
>

Note that

fun = function(x) y

doit = function() {
    y = 1
    bplapply(1:2, fun, BPPARAM = SnowParam(2))
}

fails, because y is not defined in the environment in which fun is defined 
(it's defined in the calling environment, which is different).

The most robust advice is to develop you code with the most conservative 
assumptions (e.g., register(SnowParam())) and to write functional functions 
where all variables are passed as arguments.

Martin

On 3/17/20, 6:00 AM, "Bioc-devel on behalf of Dario Strbenac" 
<bioc-devel-boun...@r-project.org on behalf of dstr7...@uni.sydney.edu.au> 
wrote:

    Good day,
    
    I have a loop in a function of my R package which by default uses bpparam() 
to set the framework used for parallelisation. On Windows, I see the error
    
    Error: BiocParallel errors
      element index: 1, 2, 3, 4, 5, 6, ...
      first error: object 'selParams' not found
    
    This error does not happen on the Linux or MacOS operating systems. It 
happens using both R 3.6 and the upcoming version 4. The error can be 
reproduced running the examples of runTests function in ClassifyR.
    
    --------------------------------------
    Dario Strbenac
    University of Sydney
    Camperdown NSW 2050
    Australia
    
    _______________________________________________
    Bioc-devel@r-project.org mailing list
    https://stat.ethz.ch/mailman/listinfo/bioc-devel
    
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel

Reply via email to