[Rcpp-devel] Possible error in setequal ??

Kevin Ushey kevinushey at gmail.com
Sat Jan 3 03:22:10 CET 2015


Hi Søren,

Thanks for the bug report -- it looks like you're right, `setequal` is
broken, and we never knew about it because we don't have any unit
tests for it. Whoops!

I'll take a look at what's going on and commit a fix + tests soon --
for now, you can use the workaround with `setdiff` which appears to
behave correctly.

Cheers,
Kevin

On Fri, Jan 2, 2015 at 3:13 PM, Søren Højsgaard <sorenh at math.aau.dk> wrote:
> Dear all,
>
> There might be an error in setequal() from sugar. Consider this
>
> #include <Rcpp.h>
> using namespace Rcpp;
>
> //[[Rcpp::export]]
> bool seteq1(CharacterVector x, CharacterVector y){
>   return setequal(x,y);
> }
>
> //[[Rcpp::export]]
> bool seteq2(CharacterVector x, CharacterVector y){
>   return
>         (((CharacterVector) setdiff(x,y)).length()==0) &
>         (((CharacterVector) setdiff(y,x)).length()==0) ;
> }
>
> The examples below does not give what I expect when calling seteq1 whereas seteq2 gives what I expect. Am I completely wrong here?
>
> Regards
> Søren
>
> seteq1(c(1,2,3), c(3,2,1))
> seteq1(c("a","b"), c("a","b"))
> seteq1(c(1,2,3), c(3,2))
> seteq1(c("a","b"), c("a","b","k"))
>
> seteq2(c(1,2,3), c(3,2,1))
> seteq2(c("a","b"), c("a","b"))
> seteq2(c(1,2,3), c(3,2))
> seteq2(c("a","b"), c("a","b","k"))
>
>> seteq1(c(1,2,3), c(3,2,1))
> [1] FALSE
>
>> seteq1(c("a","b"), c("a","b"))
> [1] FALSE
>
>> seteq1(c(1,2,3), c(3,2))
> [1] FALSE
>
>> seteq1(c("a","b"), c("a","b","k"))
> [1] FALSE
>
>> seteq2(c(1,2,3), c(3,2,1))
> [1] TRUE
>
>> seteq2(c("a","b"), c("a","b"))
> [1] TRUE
>
>> seteq2(c(1,2,3), c(3,2))
> [1] FALSE
>
>> seteq2(c("a","b"), c("a","b","k"))
> [1] FALSE
>
> _______________________________________________
> 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


More information about the Rcpp-devel mailing list