2015-09-24 12 views
11

मैं इस अप्रत्याशित सुविधा पर ध्यान दिया है:आर सूचियां - तत्व नाम कैसे प्रबंधित किए जाते हैं?

foo <- list(whatever=1:10) 

अब, निम्नलिखित कार्यों के रूप में अच्छी तरह से: यह अप्रत्याशित परिणाम है

foo[["wha"]] 

:

foo$wha 
foo$w 
foo$whateve 

हालांकि, निम्नलिखित नहीं है (मेरे लिए अप्रत्याशित, वह है) कि यदि आपके पास दो संभावित नाम हैं, जैसे "CXCL1" और "CXCL11", और आप चाहते हैं अब सीएक्ससीएल 1 !is.null(foo$CXCL1) का निरीक्षण करके शून्य नहीं है, यह सीएक्ससीएल 1 शून्य होने पर भी सत्य वापस आ जाएगा, लेकिन सीएक्ससीएल 11 नहीं है।

मेरे प्रश्न हैं:

  1. कैसे काम करता है?
  2. foo$whatever और foo[["whatever"]] के बीच क्या अंतर है?
  3. कोई भी इस व्यवहार को क्यों चाहेगा और मैं इसे कैसे अक्षम कर सकता हूं?
+6

[यहां एक समान प्रश्न का मेरा उत्तर दिया गया है] (http://stackoverflow.com/questions/11066464/you-can- संक्षिप्त-list-names-why/11066583#11066583) –

+6

'सहायता ("[[") 'यहां बहुत बढ़िया मूल्य है (यह आपके द्वारा अनुभव किए जा रहे 'आंशिक मिलान' पर चर्चा करता है)। आपको 'foo [["चीज़", सटीक = TRUE]] पर विचार करना चाहिए, यदि आपको मिलान में सटीकता की आवश्यकता है (यह' [['हालांकि) के लिए डिफ़ॉल्ट है। चेतावनियां प्राप्त करने के लिए आप 'विकल्प (चेतावनीपार्टियल मैचडॉलर = TRUE)' भी सेट कर सकते हैं। – hrbrmstr

+1

आप कम से कम सभी संभावित नामों के साथ सूची भरकर और उन्हें सेट करके अपने मामले में समस्या से बच सकते हैं। 'सीएक्ससीएल 1 = नल' –

उत्तर

1
  1. आंशिक मिलान केवल सूची नामों में से अद्वितीय प्रारंभिक subsequences के साथ काम करता है। तो, उदाहरण के लिए:

    > l <- list(score=1, scotch=2) 
    > l$core #only INITIAL subsequences 
    NULL 
    > l$sco #only UNIQUE subsequences 
    NULL 
    > l$scor 
    [1] 1 
    
  2. दोनों [[ और $ सूची की एक एकल तत्व का चयन करें। मुख्य अंतर यह है कि $ गणना सूचकांक की अनुमति नहीं देता है, जबकि [[ करता है, और उस आंशिक मिलान को डिफ़ॉल्ट रूप से ऑपरेटर $ के साथ अनुमति दी जाती है लेकिन [[ के साथ नहीं।

  3. ये निकालें या रिप्लेसमेंट ऑपरेटरों एस से आते हैं, हालांकि आर, आंशिक मेल के उपयोग को प्रतिबंधित करते हुए एस डिफ़ॉल्ट रूप से सबसे ऑपरेटरों में आंशिक मेल का उपयोग करता है।

अपने उदाहरण में, यदि CXCL1 और CXCL11 एक समय में होना है और आप सूचकांक foo$CXCL1, कि एक आंशिक मिलान नहीं है और CXCL1 के मूल्य वापस चाहिए। यदि नहीं, शायद एक और समस्या है।

मुझे इंगित करना चाहिए, [[ आंशिक मिलान को संस्करण R 2.7.0 से डिफ़ॉल्ट रूप से प्रारंभ होने की अनुमति नहीं देनी चाहिए।

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