2011-06-08 17 views
6

मुझे पूर्णांक मिला और डबल मान मैट्रिक्स में अलग-अलग व्यवहार करते हैं और गलत जवाब केवल दोहरे डेटा प्रकारों के लिए लौटाया जाता है।मैट्रिक्स में डबल/न्यूमेरिक मान%% में% का उपयोग करके गलत जवाब क्यों देता है?

#Test 
m <- matrix(1:12,4,3) 
which(!m[1,] %in% 1:5) 

which(!m[1,] %in% 1:5) 
[1] 3 
हालांकि

, जब मैं डबल/सांख्यिक में मान बदल गया है,

m <- matrix(c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6), 4,3) 
which(!m[1,] %in% 0.10:0.35) 

    [,1] [,2] [,3] 
[1,] 0.1 0.5 0.3 
[2,] 0.2 0.6 0.4 
[3,] 0.3 0.1 0.5 
[4,] 0.4 0.2 0.6 

which(!m[1,] %in% 0.10:0.35) 
[1] 2 3 

केवल 2 जवाब में होना चाहिए क्योंकि 1,3, 0.35 करने के लिए 0.10 की रेंज में हैं, जिनके चलते यह अलग है पूर्णांक और संख्यात्मक का उपयोग कर गणना में। धन्यवाद!

+1

+1 नमूना कोड, डेटा के साथ एक स्पष्ट सवाल पूछने के लिए और अपेक्षित परिणाम:

परिणाम आप के बाद कर रहे हैं पाने के लिए, आप निम्नलिखित लिखने के लिए की जरूरत है। – Andrie

उत्तर

9

ऐसा इसलिए है क्योंकि : ऑपरेटर क्या करता है इसकी एक ग़लत समझ है। : एक सीमा का संकेत नहीं देता है, लेकिन वास्तव में अलग-अलग मानों (पूर्णांक अंतराल पर) के अनुक्रम उत्पन्न करने के लिए एक शॉर्टकट है।

की तुलना करें:

> 1:5 
[1] 1 2 3 4 5 

> 0.1:0.35 
[1] 0.1 

तो कोड परीक्षण के अपने पहले बिट है कि क्या मान %in% पूर्णांकों 5. 1 लेकिन कोड परीक्षण के दूसरे बिट की सीमा कि आपके डेटा में 0.1 के बराबर है।

which(!(m[1, ] >= 0.1 & m[1, ] <= 0.35)) 
[1] 2 
+0

0.1 के बराबर है? – jrara

+0

@jrara yep, मुझे लगता है कि एंड्री का मतलब क्या है और मैंने तदनुसार जवाब संपादित किया है। –

+0

@GavinSimpson। आपकी संपादन उंगली मेरी तुलना में स्पष्ट रूप से बहुत तेज है। – Andrie

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