With today's R 2.10.0(devel) I get:
> anyDuplicated(c(1,NA,3,NA,5), incomp=NA) # expect 0
Warning: stack imbalance in 'anyDuplicated', 20 then 21
Warning: stack imbalance in '.Internal', 19 then 20
Warning: stack imbalance in '{', 17 then 18
[1] 0> anyDuplicated(c(1,NA,3,NA,3), incomp=NA) # expect 5
Warning: stack imbalance in 'anyDuplicated', 20 then 21
Warning: stack imbalance in '.Internal', 19 then 20
Warning: stack imbalance in '{', 17 then 18
[1] 0> anyDuplicated(c(1,NA,3,NA,3), incomp=3) # expect 4
Warning: stack imbalance in 'anyDuplicated', 20 then 21
Warning: stack imbalance in '.Internal', 19 then 20
Warning: stack imbalance in '{', 17 then 18
[1] 0> anyDuplicated(c(1,NA,3,NA,3), incomp=c(3,NA)) # exect 0
Warning: stack imbalance in 'anyDuplicated', 20 then 21
Warning: stack imbalance in '.Internal', 19 then 20
Warning: stack imbalance in '{', 17 then 18
[1] 0> version$svn
[1] "48493"
After applying the attached patch I get
> anyDuplicated(c(1,NA,3,NA,5), incomp=NA)
[1] 0> anyDuplicated(c(1,NA,3,NA,3), incomp=NA)
[1] 5> anyDuplicated(c(1,NA,3,NA,3), incomp=3)
[1] 4> anyDuplicated(c(1,NA,3,NA,3), incomp=c(3,NA))
[1] 0
Calls to UNPROTECT() were missing an a macro definition
did nothing because there were no backslashes at the ends
of lines. I didn't check the results very carefully.
Bill Dunlap
TIBCO Software Inc - Spotfire Division
wdunlap tibco.com
-------------------------------------------------------
Index: unique.c
==================================================================--- unique.c
(revision 48503)
+++ unique.c (working copy)
@@ -462,16 +462,18 @@
for (i = 0; i < data.M; i++) h[i] = NIL;
if(from_last)
for (i = n-1; i >= 0; i--) {
-#define IS_DUPLICATED_CHECK
- if(isDuplicated(x, i, &data)) {
- Rboolean isDup = TRUE;
- for(j = 0; j < m; j++)
- if(data.equal(x, i, incomp, j)) {
- isDup = FALSE; break;
- }
- if(isDup)
- return ++i;
- /* else continue */
+#define IS_DUPLICATED_CHECK \
+ if(isDuplicated(x, i, &data)) { \
+ Rboolean isDup = TRUE; \
+ for(j = 0; j < m; j++) \
+ if(data.equal(x, i, incomp, j)) { \
+ isDup = FALSE; break; \
+ } \
+ if(isDup) { \
+ UNPROTECT(1); \
+ return ++i; \
+ } \
+ /* else continue */ \
}
IS_DUPLICATED_CHECK;
}
@@ -480,6 +482,7 @@
IS_DUPLICATED_CHECK;
}
+ UNPROTECT(1) ;
return 0;
}
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: unique.c.diff.txt
URL:
<https://stat.ethz.ch/pipermail/r-devel/attachments/20090508/e8a54ebb/attachment.txt>