From wdunlap at tibco.com  Sat May  9 01:16:56 2009
From: wdunlap at tibco.com (William Dunlap)
Date: Fri, 8 May 2009 16:16:56 -0700
Subject: [Rd] anyDuplicated(incomp=NA) fails
Message-ID: <77EB52C6DD32BA4D87471DCD70C8D70001297167@NA-PA-VBE03.na.tibco.com>

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>


[Rd] anyDuplicated(incomp=NA) fails
William Dunlap