2012-07-03 11 views
9

यह वास्तव में सरल है लेकिन मुझे इसका पता लगाना प्रतीत नहीं होता है। मुझे पता है कि आर %in% का एक नकारात्मक संस्करण है जो "अंदर नहीं" लौटाता है। जाहिर है, मैं सिर्फ !(x %in% y) का उपयोग कर सकता हूं, लेकिन भाषा में पहले ही अस्वीकृत निर्माण शामिल है और मैं इसका उपयोग करना चाहता हूं, गोश्डर्निट।नकारात्मकता के साथ मिलान

तो फ़ंक्शन क्या है? खोज के साथ-साथ %nin% और %notin% सभी असफल हो जाते हैं।

बोनस आप के लिए इन्टरनेट अगर आप बेंचमार्क निम्न नमूना डेटा का उपयोग कर बनाम !(x %in% y) आपका जवाब:

x <- sample(sample(letters,5), 10^3, replace=TRUE) 
y <- sample(letters, 10^5, replace=TRUE) 
+1

मुझे नहीं लगता कि यह करता है। मैं सिर्फ 'नेगेट' का उपयोग कर अपना खुद का बना हूं। – joran

+0

जो सवाल पूछता है: 'Negate''! 'से तेज/धीमी है? लेकिन गंभीरता से, मैंने शपथ ली थी कि मैंने इसे पहले देखा है। –

+0

मुझे लगता है कि पैकेज पर एक ऐड के बाद आप क्या कर रहे हैं लेकिन यह इंडेक्स उंगली पर 'मोम' टाइप करने के लिए बहुत नाराज नहीं है। खासकर जब से आपके कंस्ट्रैसिस अनावश्यक हैं। % y% में x% बस ठीक काम करता है। मुझे लगता है कि नेगेट धीमा हो जाएगा क्योंकि अक्सर उच्च ऑर्डर फ़ंक्शन होते हैं। –

उत्तर

13
बस ब्याज से बाहर

"%w/o%" <- function(x, y) x[!x %in% y] 
'%ni%' <- Negate('%in%') 

> benchmark(y[y%ni%x], y%w/o%x,replications=1000) 
     test replications elapsed relative user.self sys.self user.child 
2 y %w/o% x   1000 5.32 1.000000  4.60  0.70   NA 
1 y[y %ni% x]   1000 5.34 1.003759  4.68  0.65   NA 
    sys.child 
2  NA 
1  NA 

क्या मुझे कुकी मिलती है?

+2

आपको बेंचमार्क (वाई [वाई% एनआई% एक्स], वाई% डब्ल्यू/ओ% एक्स) के लिए एक कुकी मिलती है। क्या आप संपादित कर सकते हैं? –

+0

तो यह मूल रूप से धो है - 0.3% अंतर माप त्रुटि है। लेकिन अच्छा काम है। –

+1

लेकिन शायद फ़ंक्शन नाम में '/' रखने के लिए कुकी खो दें? :-) –

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