[Rcpp-devel] Possible error in setequal ??

Kevin Ushey kevinushey at gmail.com
Sat Jan 3 03:28:14 CET 2015


Hi Qiang,

I think you're right -- I just took a peek and that looks like the
offending bit. I'm going to strip it out, run tests and then commit if
everything looks good.

Thanks!
Kevin

On Fri, Jan 2, 2015 at 6:26 PM, Qiang Kou <qkou at umail.iu.edu> wrote:
> It seems fixed after removing that line [1].
>
>> library(Rcpp)
>> sourceCpp("seteq.cpp")
>> seteq1(c(1,2,3), c(3,2,1))
> [1] TRUE
>> seteq1(c(1,2,3), c(3,2,1))
> [1] TRUE
>> seteq1(c("a","b"), c("a","b"))
> [1] TRUE
>> seteq1(c(1,2,3), c(3,2))
> [1] FALSE
>> seteq1(c("a","b"), c("a","b","k"))
> [1] FALSE
>> seteq1(c("a","b"), c("a","b","b"))
> [1] TRUE
>
> [1]
> https://github.com/RcppCore/Rcpp/blob/master/inst/include/Rcpp/sugar/functions/setdiff.h#L80
>
>
> On Fri, Jan 2, 2015 at 9:23 PM, Qiang Kou <qkou at umail.iu.edu> wrote:
>>
>> I think the bug is from [1].
>>
>> This line doesn't make much sense.
>>
>> Best,
>>
>> KK
>>
>>
>> [1]
>> https://github.com/RcppCore/Rcpp/blob/master/inst/include/Rcpp/sugar/functions/setdiff.h#L80
>>
>> On Fri, Jan 2, 2015 at 9:22 PM, Kevin Ushey <kevinushey at gmail.com> wrote:
>>>
>>> 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
>>> _______________________________________________
>>> 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
>>
>>
>>
>>
>> --
>> Qiang Kou
>> qkou at umail.iu.edu
>> School of Informatics and Computing, Indiana University
>>
>
>
>
> --
> Qiang Kou
> qkou at umail.iu.edu
> School of Informatics and Computing, Indiana University
>


More information about the Rcpp-devel mailing list