<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small">Dear list, </div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">In the process of writing a comprehensive unit testing application for Rcpp I may have come across a bug in the code. It seems to me that the following block should execute just fine, exporting the C++ class "norm" to the global environment: </div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><font face="monospace">require(inline)</font></div><div class="gmail_default" style="font-size:small"><font face="monospace">require(Rcpp) </font></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace"><br></span></div><div class="gmail_default" style><div class="gmail_default" style><font face="monospace">inc <- '</font></div><div class="gmail_default" style><font face="monospace">using namespace Rcpp;</font></div><div class="gmail_default" style><font face="monospace">double norm( double x, double y ) {</font></div><div class="gmail_default" style><font face="monospace">    return sqrt( x*x + y*y );</font></div><div class="gmail_default" style><font face="monospace">}</font></div><div class="gmail_default" style><font face="monospace">RCPP_MODULE(mod) {</font></div><div class="gmail_default" style><font face="monospace">    function( "norm", &norm ); </font></div><div class="gmail_default" style><font face="monospace">}'</font></div><div class="gmail_default" style><font face="monospace"><br></font></div><div class="gmail_default" style><font face="monospace">fx <- cxxfunction(signature(), plugin="Rcpp", include=inc)</font></div><div class="gmail_default" style><font face="monospace">mod <- Module("mod", getDynLib(fx))</font></div><div class="gmail_default" style><font face="monospace">  </font></div><div class="gmail_default" style><font face="monospace">loadRcppClass('norm', 'norm', mod)<br></font></div></div><div><br></div><div><span style="font-family:georgia,serif"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">Wh​at happens, though, is that the following error is returned: </div></span><br></div><div><span style="font-family:georgia,serif"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline"><br></div></span></div><div><div class="gmail_default" style="display:inline"><font face="monospace"><div>Error in as.environment(pos) : </div><div>  no item called "moduleName" on the search list</div></font></div></div><div><br></div><div><font face="georgia, serif">D</font><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">​igging in to </div><div class="gmail_default" style="font-size:small;display:inline"><font face="monospace">loadRcppClass</font></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">, I find that the function fails at the line: </div></div><div><font face="georgia, serif"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline"><br></div></font></div><div><font face="monospace">mod <- loadModule(module, NULL, env = where, loadNow = TRUE)</font></div><div><font face="georgia, serif"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">​</div></font></div><div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">Entering </div><div class="gmail_default" style="font-size:small;display:inline"><font face="monospace">loadModule</font></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">, the function fails here, at the "get" statement: </div></div><div><span style="font-family:georgia,serif"><br></span></div><div><font face="monospace">loadM <- as.environment(module)<br></font></div><div><div class="gmail_default" style="display:inline"><div style><font face="monospace">module <- get(loadM, "moduleName")</font></div></div></div><div><font face="georgia, serif"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline"><br></div></font></div><div><font face="georgia, serif"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">Isn't this backward? get syntax is:</div></font></div><div><font face="georgia, serif"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline"><br></div></font></div><div><div class="gmail_default" style="display:inline"><div><font face="monospace">get(x, pos = -1, envir = as.environment(pos), mode = "any",</font></div><div><font face="monospace">    inherits = TRUE)</font></div><div style="font-family:georgia,serif"><br></div><div><span style="font-family:georgia,serif">Where "</span><font face="monospace">x</font><font face="georgia, serif">" is the object sought in the specified environment. In this case, the function is failing because it can't find </font><font face="monospace">moduleName</font><font face="georgia, serif"> in the environment's search list, but the reason for this seems to be that the current statement is search for an environment within a character string, rather than a character string representing a named object within an environment. </font></div><div style="font-family:georgia,serif"><br></div><div style="font-family:georgia,serif">Is this in need of a patch, or am I missing something obvious? </div><div style="font-family:georgia,serif"><br></div><div style="font-family:georgia,serif">Cheers, <br>Aaron </div><div style="font-family:georgia,serif"><br></div></div></div>
</div>