<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Greetings and Salutations Sharat,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Could you supply some test data?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Sincerely,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">JJB<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> rcpp-devel-bounces@lists.r-forge.r-project.org [mailto:rcpp-devel-bounces@lists.r-forge.r-project.org]
<b>On Behalf Of </b>Sharat<br>
<b>Sent:</b> Thursday, July 27, 2017 8:31 AM<br>
<b>To:</b> rcpp-devel@lists.r-forge.r-project.org<br>
<b>Subject:</b> [Rcpp-devel] Fwd: Calling R function in Rcpp returns compatibility issues<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">Hi:<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I'm trying to call a R function (that compares strings) in Rcpp and return the result to make the comparisons run faster. Am a noob with Rcpp; so please bear. The input to the R function is a matrix of 2 columns. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The error is: <b>Error in getGoing(product) : Not compatible with STRSXP: [type=NULL]. </b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Please assist. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">#include<Rcpp.h><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">using namespace Rcpp;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">/*** R<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">comps= function(vec)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  streets <- vec<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  cnt <- nrow(streets)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  res <- c()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  print(paste0("Comparing ", (cnt)," pairs..."))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  for (i in 1:cnt)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    matched <- TRUE    <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    prop1 = streets[i,1]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    prop2 = streets[i,2]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    prop1_parts = strsplit(trimws(prop1), ' ')<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    prop2_parts = strsplit(trimws(prop2), ' ')<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    prop1_parts_count = length(prop1_parts[[1]])<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    prop2_parts_count = length(prop2_parts[[1]])<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    if (prop1_parts_count == prop2_parts_count)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      for (x in 1:prop1_parts_count)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        part1 = prop1_parts[[1]][x]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        part2 = prop2_parts[[1]][x]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        if (part1 == part2) { <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            matched = matched & TRUE <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        else if (adist(part1, part2, partial = T)==0 | adist(part2,part1, partial = T)==0){ <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            matched = matched & TRUE<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        else {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">          matched = matched & FALSE<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">          break<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      }#forloop ends<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      if(matched){<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        append(res,paste(prop1,"<-->", prop2))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    }#if loops ends <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  }#primary for loops ends<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  res<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}#function ends <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">*/<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">// [[Rcpp::export]]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Rcpp::StringMatrix getGoing(Rcpp::StringVector vec){<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Rcpp::Environment env = Rcpp::Environment::global_env();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Rcpp::Function f = env["comps"];  <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Rcpp::StringMatrix result = f(vec);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  return result;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    <o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</body>
</html>