[Rcpp-devel] Fwd: Calling R function in Rcpp returns compatibility issues

Sharat schmoozed at gmail.com
Thu Jul 27 17:59:29 CEST 2017


Thanks Serguei for clearing up the data structures. I did test the function
in R but when I was printing out the results, rather than returning a
vector; sorry about that. Will be much more careful.

On Thu, Jul 27, 2017 at 9:47 AM, Serguei Sokol <serguei.sokol at gmail.com>
wrote:

> Hi Sharat,
>
> First, few preliminary remarks before answering your question.
> 1. Just like every one asking for assistance, your should provide a
> minimal reproducible example.
> 2. Before asking about Rcpp issue, it would be reasonable if you test your
> comps() function in R,
> to be sure that the problem is not in comps() itself (and yes, there is a
> problem in comps(), cf. hereafter)
> 3. It is counter-intelligent to use Rcpp just for calling an R function.
> Sometimes such calling is
> unavoidable but doing _only_ this is a waste of time. Simply call your
> function directly from R.
> Main interest of Rcpp is to easily interface functions written in C++
> (which are usually
> much faster then their counterparts in R) with R session.
>
> Now, about your problem.
> In fact, your version of comps() returns always NULL which causes the
> error message.
> It is because of the line:
>    append(res,paste(prop1,"<-->", prop2))
> which should be
>    res=append(res,paste(prop1,"<-->", prop2))
>
> Furthermore, when corrected and in presence of matches, comps() returns a
> string vector, not a matrix.
> So your have to invert your declarations of getGoing() making him return a
> StringVector and taking
> as argument a StringMatrix. In shorter writing, it gives:
>
> // [[Rcpp::export]]
> StringVector getGoing(StringMatrix vec){
>    Function f = Environment::global_env()["comps"];
>    return f(vec);
> }
>
> Best,
> Serguei.
>
> Le 27/07/2017 à 15:30, Sharat a écrit :
>
>> Hi:
>>
>> 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.
>>
>> The error is: *Error in getGoing(product) : Not compatible with STRSXP:
>> [type=NULL]. *
>>
>>
>> Please assist.
>>
>> #include<Rcpp.h>
>> using namespace Rcpp;
>>
>> /*** R
>> comps= function(vec)
>> {
>>    streets <- vec
>>    cnt <- nrow(streets)
>>    res <- c()
>>    print(paste0("Comparing ", (cnt)," pairs..."))
>>    for (i in 1:cnt)
>>    {
>>      matched <- TRUE
>>      prop1 = streets[i,1]
>>      prop2 = streets[i,2]
>>
>>      prop1_parts = strsplit(trimws(prop1), ' ')
>>      prop2_parts = strsplit(trimws(prop2), ' ')
>>      prop1_parts_count = length(prop1_parts[[1]])
>>      prop2_parts_count = length(prop2_parts[[1]])
>>      if (prop1_parts_count == prop2_parts_count)
>>      {
>>        for (x in 1:prop1_parts_count)
>>        {
>>          part1 = prop1_parts[[1]][x]
>>          part2 = prop2_parts[[1]][x]
>>          if (part1 == part2) {
>>              matched = matched & TRUE
>>          }
>>          else if (adist(part1, part2, partial = T)==0 |
>> adist(part2,part1, partial = T)==0){
>>              matched = matched & TRUE
>>          }
>>          else {
>>            matched = matched & FALSE
>>            break
>>          }
>>        }#forloop ends
>>        if(matched){
>>          append(res,paste(prop1,"<-->", prop2))
>>        }
>>      }#if loops ends
>>    }#primary for loops ends
>>    res
>> }#function ends
>> */
>>
>> // [[Rcpp::export]]
>> Rcpp::StringMatrix getGoing(Rcpp::StringVector vec){
>>    Rcpp::Environment env = Rcpp::Environment::global_env();
>>    Rcpp::Function f = env["comps"];
>>    Rcpp::StringMatrix result = f(vec);
>>    return result;
>> }
>>
>>
>>
>> _______________________________________________
>> Rcpp-devel mailing list
>> Rcpp-devel at lists.r-forge.r-project.org
>> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20170727/3371a7ea/attachment.html>


More information about the Rcpp-devel mailing list