It seems fixed after removing that line [1].
library(Rcpp)
sourceCpp("seteq.cpp")
seteq1(c(1,2,3), c(3,2,1))
seteq1(c(1,2,3), c(3,2,1))
seteq1(c("a","b"), c("a","b"))
seteq1(c("a","b"), c("a","b","k"))
seteq1(c("a","b"), c("a","b","b"))
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))
seteq1(c("a","b"), c("a","b"))
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("a","b"), c("a","b","k"))