<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>