2011-03-10 10 views

उत्तर

17

मुझे लगता है कि मुझे जवाब मिला।

a=c(3,5,7,2,7,9) 
b=1:10 
any(duplicated(a)) #True 
any(duplicated(b)) #False 
+4

'कोई भी डुप्लिकेट' बहुत लंबे वैक्टरों के लिए थोड़ा तेज़ होगा - यह पहली डुप्लिकेट को समाप्त होने पर समाप्त हो सकता है। – hadley

+0

यह भी बेहतर है! – ZNN

+1

मुझे लगता है कि किसी भी डुप्लिकेट() का उपयोग थोड़ा अजीब है। यह पहली डुप्लिकेट के 1-आधारित इंडेक्स के मूल्य के साथ लम्बाई का एक पूर्णांक देता है, या 0। तो, ** के बराबर (डुप्लीकेट (ए)) ** होना चाहिए ** किसी भी डुप्लिकेट (ए) == 0 * *। यदि कोई डुप्लिकेट है तो कोई डुप्लिकेट() ** सत्य ** लौटाता है, यह अधिक सहज है। –

0

जांच इस:

> all(diff(c(1,2,3))) 
[1] TRUE 
Warning message: 
In all(diff(c(1, 2, 3))) : coercing argument of type 'double' to logical 
> all(diff(c(1,2,2,3))) 
[1] FALSE 
Warning message: 
In all(diff(sort(c(1, 2, 4, 2, 3)))) : coercing argument of type 'double' to logical 

आप कुछ कास्टिंग चेतावनी से छुटकारा पाने के लिए जोड़ सकते हैं दोहराया() फ़ंक्शन का उपयोग करें।

1

यदि आप लगातार दोहराने की तलाश में हैं तो आप diff का उपयोग कर सकते हैं।

a <- 1:10 
b <- c(1:5, 5, 7, 8, 9, 10) 
diff(a) 
diff(b) 

या वेक्टर में कहीं भी:

length(a) == length(unique(a)) 
length(b) == length(unique(b)) 
3

इसके अलावा x में समान मूल्यों के रनों की लंबाई को खोजने के लिए rle(x) प्रयास करें।

संबंधित मुद्दे