जब मुझे किसी data.frame को फ़िल्टर करने की आवश्यकता होती है, अर्थात, कुछ शर्तों को पूरा करने वाली पंक्तियाँ निकालें, तो मैं subsetफ़ंक्शन का उपयोग करना पसंद करता हूं :
subset(airquality, Month == 8 & Temp > 90)
[कार्य के बजाय :
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
मेरी प्राथमिकता के दो मुख्य कारण हैं:
मुझे लगता है कि कोड बेहतर ढंग से पढ़ा जाता है, बाएं से दाएं। यहां तक कि जिन लोगों को आर के बारे में कुछ भी नहीं पता है वे बता सकते हैं कि
subsetऊपर दिया गया कथन क्या है।क्योंकि कॉलम को
selectअभिव्यक्ति में चर के रूप में संदर्भित किया जा सकता है , मैं कुछ कीस्ट्रोक्स को बचा सकता हूं। ऊपर मेरे उदाहरण में, मुझे केवलairqualityएक बार टाइप करना थाsubset, लेकिन तीन बार[।
इसलिए मैं खुश रह रहा था, subsetहर जगह का उपयोग कर रहा था क्योंकि यह छोटा है और बेहतर पढ़ता है, यहां तक कि अपने साथी आर कोडर्स को इसकी सुंदरता की वकालत करता है। लेकिन कल मेरी दुनिया बिखर गई। subsetदस्तावेज़ीकरण पढ़ते समय , मैं इस खंड को नोटिस करता हूं:
चेतावनी
यह एक सुविधा फ़ंक्शन है जो अंतःक्रियात्मक रूप से उपयोग करने के लिए है। प्रोग्रामिंग के लिए मानक सब्मिटिंग फ़ंक्शंस का उपयोग करना बेहतर है [और विशेष रूप से लॉजिक सब्मिट के गैर-मानक मूल्यांकन में अप्रत्याशित परिणाम हो सकते हैं।
क्या कोई व्यक्ति यह स्पष्ट करने में मदद कर सकता है कि लेखकों का क्या मतलब है?
सबसे पहले, " अंतःक्रियात्मक उपयोग के लिए " से उनका क्या अर्थ है ? मुझे पता है कि एक संवादात्मक सत्र क्या है, जैसा कि BATCH मोड में चलने वाली स्क्रिप्ट के विपरीत है, लेकिन मुझे यह नहीं दिखता कि इससे क्या अंतर होना चाहिए।
फिर, क्या आप कृपया " तर्क उपसमिति के गैर-मानक मूल्यांकन " की व्याख्या कर सकते हैं और यह खतरनाक क्यों है, शायद एक उदाहरण प्रदान करें?
dplyr::filterलिए भी यही समस्या है। यानी अगर पर्यावरण में उस नाम के साथ एक चर होता है, तो वह डेटा फ्रेम में चर के बजाय इसका उपयोग करेगा। डिबगिंग भ्रमित करने के लिए बनाता है!
with(airquality, airquality[Month == 8 & Temp > 90, ])