Dear Professor Ripley, PkgB does not need to be on the search path---importing into the namespace is fine. I did not realize that namespace scoping ensured that if a cluster is created from within a package, that packages entire environment tree is available on all the workers. I tried to apply how makeCluster works from an interactive R session, where functions from packages that are loaded when the cluster is created are not available on the workers, to how it works from within a package.
Thanks for your reply, Josh On Fri, Aug 8, 2014 at 4:47 PM, Prof Brian Ripley <rip...@stats.ox.ac.uk> wrote: > The safe, elegant way to do this is to use namespace scoping: it is still > not at all clear why 'other code' needs PkgB *on the search path*. > > In other cases seen in CRAN submissions, 'other code' has been in PkgA's > namespace, and hence things in PkgB's exports have been visible as it was > imported by PkgA and hence in the environment tree for functions in PkgA. > Then namespace scoping will ensure that PkgB's namespace is loaded on the > cluster workers. > > > > On 08/08/2014 00:58, Joshua Wiley wrote: > >> Someone kindly pointed out that it is not clear from my email why Depends >> will not work. A more complete example is: >> >> PkgA: >> f <- function(ncores) { >> cl <- makeCluster(ncores) >> >> clusterEvalQ(cl, { >> require(PkgB) >> }) >> [other code] >> >> ### this is the code I want to work and need to be able to call >> ### PkgB functions on each of the cluster slaves >> output <- parLapply(cl, 1:n, function(i) { >> [code from my package and using some functions from PkgB] >> }) >> >> } >> >> As far as I know, just because I add PkgB to the Depends (or imports, >> whatever) of PkgA, does not mean that the cluster started by PkgA will >> automatically have PkgB loaded and functions available. >> >> Thanks! >> >> >> >> On Fri, Aug 8, 2014 at 9:35 AM, Joshua Wiley <jwiley.ps...@gmail.com> >> wrote: >> >> Dear All, >>> >>> What is the preferred way for Package A, to initialize a cluster, and >>> load >>> Package B on all nodes? >>> >>> I am writing a package that parallelizes some functions through the use >>> of >>> a cluster if useRs are on a Windows machine (using parLapply and family). >>> I also make use of another package in some of my code, so it is >>> necessary >>> to load the required packages on each slave once the cluster is started. >>> >>> Right now, I have done this, by evaluating require(packages) on each >>> slave; however, Rcmd check has a note that I should remove the "require" >>> in >>> my code. >>> >>> Thanks! >>> >>> Josh >>> >>> -- >>> Joshua F. Wiley >>> Ph.D. Student, UCLA Department of Psychology >>> http://joshuawiley.com/ >>> Senior Analyst, Elkhart Group Ltd. >>> http://elkhartgroup.com >>> Office: 260.673.5518 >>> >>> >> >> >> > > -- > Brian D. Ripley, rip...@stats.ox.ac.uk > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595 > -- Joshua F. Wiley Ph.D. Student, UCLA Department of Psychology http://joshuawiley.com/ Senior Analyst, Elkhart Group Ltd. http://elkhartgroup.com Office: 260.673.5518 [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel