title: How to export objects to parallel clusters within a function in R
body: <p>I am writing a function to combine and organize data then run MCMC chains in parallel using the parallel function in base R. My function is below.</p>
  
  <pre><code>dm100zip &lt;- function(y, n.burn = 1, n.it = 3000, n.thin = 1) {
    y &lt;- array(c(as.matrix(y[,2:9]), as.matrix(y[ ,10:17])), c(length(y$Plot), 8, 2))
    nplots &lt;- nrow(y)
    ncap1 &lt;- apply(y[,1:8, 1],1,sum)
    ncap2 &lt;- apply(y[,1:8, 2],1,sum)
    ncap &lt;- as.matrix(cbind(ncap1, ncap2))
    ymax1 &lt;- apply(y[,1:8, 1],1,sum)
    ymax2 &lt;- apply(y[,1:8, 2],1,sum)
  
    # Bundle data for JAGS/BUGS
    jdata100 &lt;- list(y=y, nplots=nplots, ncap=ncap)
  
    # Set initial values for Gibbs sampler
    inits100 &lt;- function(){
      list(p0=runif(1, 1.1, 2),
        p.precip=runif(1, 0, 0.1),
        p.day = runif(1, -.5, 0.1))
    }
  
    # Set parameters of interest to monitor and save
    params100 &lt;- c("N", "p0")
  
    # Run JAGS in parallel for improved speed
    CL &lt;- makeCluster(3) # set number of clusters = to number of desired chains
    clusterExport(cl=CL, list("jdata100", "params100", "inits100", "ymax1", "ymax2", "n.burn", "jag", "n.thin")) # make data available to jags in diff cores
    clusterSetRNGStream(cl = CL, iseed = 5312)
  
    out &lt;- clusterEvalQ(CL, {
      library(rjags)
      load.module('glm')
      jm &lt;- jags.model("dm100zip.txt", jdata100, inits100, n.adapt = n.burn, n.chains = 1)
      fm &lt;- coda.samples(jm, params100, n.iter = n.it, thin = n.thin)
      return(as.mcmc(fm))
  
    })
  
    out.list &lt;- mcmc.list(out) # group output from each core into one list
    stopCluster(CL)
  
    return(out.list)
  }
  </code></pre>
  
  <p>When I run the function I get an error that n.burn, n.it, and n.thin are not found for use in the <code>clusterExport</code> function. For example,</p>
  
  <pre><code>dm100zip.list.nain &lt;- dm100zip(NAIN, n.burn = 1, n.it = 3000, n.thin = 1) # returns error
  </code></pre>
  
  <p>If I set values for each of them before running the function, then it uses those values and runs fine. For example,</p>
  
  <pre><code>n.burn = 1
  n.it = 1000
  n.thin = 1
  dm100zip.list.nain &lt;- dm100zip(NAIN, n.burn = 1, n.it = 3000, n.thin = 1) 
  </code></pre>
  
  <p>This runs fine but uses n.it = 1000 not 3000</p>
  
  <p>Can someone help with why the objects in the global environment are used by the <code>ClusterExport</code> function but not the values assigned by the function that <code>ClusterExport</code> is run within? Is there a way around this?</p>