<div dir="ltr">This is great, James. Thank you so much for sharing. <div><br></div><div>Best regards, </div><div>Naeem </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 14, 2021 at 3:09 PM Balamuta, James Joseph <<a href="mailto:balamut2@illinois.edu">balamut2@illinois.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US" style="overflow-wrap: break-word;">
<div class="gmail-m_8632307443592995204WordSection1">
<p class="MsoNormal">Naeem,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">The best path for including compiled code in a package is to place it within the `src/` directory instead of using `Rcpp::cppFunction()` to compile. The reasons for this are stated succiently here: <a href="https://stackoverflow.com/a/6074391/1345455" target="_blank">https://stackoverflow.com/a/6074391/1345455</a><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">From there, the C++ can easily be exported across parallel workers just by loading the package.
<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Consider looking at how this example package using doParallel is structured.
<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><a href="https://github.com/r-pkg-examples/rcpp-and-doparallel" target="_blank">https://github.com/r-pkg-examples/rcpp-and-doparallel</a>
<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Best,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">JJB<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(181,196,223);padding:3pt 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12pt;color:black">From: </span></b><span style="font-size:12pt;color:black">Rcpp-devel <<a href="mailto:rcpp-devel-bounces@lists.r-forge.r-project.org" target="_blank">rcpp-devel-bounces@lists.r-forge.r-project.org</a>> on behalf of Naeem Khoshnevis <<a href="mailto:khoshnevis.naeem@gmail.com" target="_blank">khoshnevis.naeem@gmail.com</a>><br>
<b>Date: </b>Friday, May 14, 2021 at 11:49 AM<br>
<b>To: </b>"<a href="mailto:rcpp-devel@lists.r-forge.r-project.org" target="_blank">rcpp-devel@lists.r-forge.r-project.org</a>" <<a href="mailto:rcpp-devel@lists.r-forge.r-project.org" target="_blank">rcpp-devel@lists.r-forge.r-project.org</a>><br>
<b>Subject: </b>[Rcpp-devel] Exporting rcpp-based function into parLapply workers in an R package<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Dear Rcpp developers:<br>
<br>
Thanks for developing and maintaining the Rcpp package. <br>
I wrote a function in Rcpp. It is available throughout the package and works as expected; however, it is not available for praLapply workers. A temporary fix is just using Rcpp::cppFunction inside the function that parLapply workers call and copy the entire
 function over there. However, this does not seem right for bigger and more complicated functions.<br>
I would be grateful if you could let me know whether there is a better long-term solution. Here is the package and three functions that you might want to take a look at.<br>
<br>
Original cpp function:<br>
<a href="https://urldefense.com/v3/__https:/github.com/fasrc/CausalGPS/blob/master/src/compute_closest_wgps_helper.cpp__;!!DZ3fjg!oyv9eCC8FkfL4RzQ_LE613qZNCplLbfU22AlYI8Faem0SaWx-GcDeRWHef6zf-42AH4$" target="_blank">https://github.com/fasrc/CausalGPS/blob/master/src/compute_closest_wgps_helper.cpp</a><br>
<br>
Wrapper function that calls this function + temporal fix:<br>
<a href="https://urldefense.com/v3/__https:/github.com/fasrc/CausalGPS/blob/master/R/compute_closest_wgps.R__;!!DZ3fjg!oyv9eCC8FkfL4RzQ_LE613qZNCplLbfU22AlYI8Faem0SaWx-GcDeRWHef6z0KitDq4$" target="_blank">https://github.com/fasrc/CausalGPS/blob/master/R/compute_closest_wgps.R</a><br>
<br>
The function that uses parLapply (please see line 63-89) to run the c++ code:<br>
<a href="https://urldefense.com/v3/__https:/github.com/fasrc/CausalGPS/blob/master/R/compute_closest_wgps.R__;!!DZ3fjg!oyv9eCC8FkfL4RzQ_LE613qZNCplLbfU22AlYI8Faem0SaWx-GcDeRWHef6z0KitDq4$" target="_blank">https://github.com/fasrc/CausalGPS/blob/master/R/compute_closest_wgps.R</a><br>
<br>
Best regards,<br>
Naeem <u></u><u></u></p>
</div>
</div>
</div>

</blockquote></div>