के लिए आ रहा प्रोग्रामर के लिए एक महान संसाधन है, अनुसंधान बस है पाइथन से बहुत अधिक idiosyncratic और कम संगत। छोटे से मध्यम आकार के डेटासेट पर त्वरित भूखंड और जांच करने के लिए यह वास्तव में अच्छा है, मुख्य रूप से क्योंकि इसकी अंतर्निहित डेटाफ्रेम ऑब्जेक्ट numpy/scipy समकक्ष की तुलना में अच्छी है, लेकिन आपको सभी प्रकार की अजीबता मिल जाएगी क्योंकि आप चीजों को और अधिक जटिल करते हैं एक लाइनर मेरी सलाह है rpy2 (दुर्भाग्यवश दुर्भाग्य से अपने पूर्ववर्ती, आरपीआई की तुलना में बहुत खराब यूआई है) और पाइथन में शेष के साथ आर में जितना संभव हो उतना कम करें।
> u = matrix(1:9,nrow=3,ncol=3)
> v = u[,1:2]
> v[1,1]
[2] 1
> w = u[,1]
> w[1,1]
Error in w[1, 1] : incorrect number of dimensions
कि कैसे असफल क्यों हुआ:
उदाहरण के लिए, निम्नलिखित मैट्रिक्स कोड पर विचार? इसका कारण यह है कि यदि आप किसी मैट्रिक्स से एक सबमैट्रिक्स चुनते हैं जिसमें किसी दिए गए अक्ष के साथ केवल एक कॉलम होता है, तो आर "मददगार" उस कॉलम को छोड़ देता है और चर के प्रकार को बदलता है। तो डब्ल्यू बल्कि एक मैट्रिक्स से पूर्णांकों का एक वेक्टर है:
> class(v)
[1] "matrix"
> class(u)
[1] "matrix"
> class(w)
[1] "integer"
इससे बचने के लिए, आप वास्तव में एक अस्पष्ट कीवर्ड पैरामीटर पारित करने के लिए की जरूरत है:
> w2 = u[,1,drop=FALSE]
> w2[1,1]
[3] 1
> class(w2)
[1] "matrix"
वहाँ nooks और इस तरह crannies का एक बहुत कुछ है। शुरुआत में आपका सबसे अच्छा दोस्त आत्मनिरीक्षण और ऑनलाइन सहायता उपकरण जैसे str
, class
, example
, और निश्चित रूप से help
होगा। साथ ही, R Graph Gallery और रिपली की Modern Applied Statistics with S-Plus पुस्तक पर उदाहरण कोड को देखना सुनिश्चित करें।
संपादित: यहाँ कारकों के साथ एक और महान उदाहरण है।
> xx = factor(c(3,2,3,4))
> xx
[1] 3 2 3 4
Levels: 2 3 4
> yy = as.numeric(xx)
> yy
[1] 2 1 2 3
पवित्र गाय! एक कारक से वापस एक संख्यात्मक रूप से परिवर्तित करने से वास्तव में रूपांतरण नहीं किया गया था जिसे आपने सोचा था। इसके बजाय यह कारक के आंतरिक गणित प्रकार पर कर रहा है। यह उन लोगों के लिए कठिन खोजने वाली बग का स्रोत है जो इस बारे में अवगत नहीं हैं, क्योंकि यह अभी भी पूर्णांक लौट रहा है और वास्तव में वास्तव में कुछ कार्य करता है (जब इनपुट पहले ही संख्यात्मक रूप से आदेश दिया जाता है)।
यह आप वास्तव में क्या करने के लिए
> as.numeric(levels(xx))[xx]
[1] 3 2 3 4
हाँ, यकीन है कि, यह तथ्य factor
मदद पृष्ठ पर है की जरूरत है, लेकिन आप केवल वहाँ भूमि जब आप इस बग के कुछ ही घंटों के खो दिया है क्या है। यह एक और उदाहरण है कि आर आपके द्वारा किए जाने वाले कार्यों को कैसे नहीं करता है। टाइप रूपांतरणों या सरणी और सूचियों के तत्वों तक पहुंचने वाली चीज़ों के साथ बहुत सावधान रहें।
'v [3] 'पायथन में आपको अनुक्रम का चौथा तत्व देता है। दिए गए मामले में '4' होगा। – SilentGhost
@SilentGost: बेशक, गलती तय की। – BioGeek
शीर्षक इस सवाल का सटीक रूप से प्रतिनिधित्व नहीं करता है - ये "आर में नुकसान" नहीं हैं, वे केवल दो अलग-अलग भाषाओं के बीच बुनियादी अंतर हैं। और वैसे भी, v [-1] इंडेक्स 1 के साथ "तत्व को हटा नहीं" करता है, यह प्रत्येक तत्व के साथ एक नया वेक्टर देता है लेकिन पहला वाला। – mdsumner