2012-08-22 15 views
12

मैं पहले दो प्रमुख घटकों की गणना करने के लिए prcomp फ़ंक्शन का उपयोग कर रहा हूं। हालांकि, मेरे डेटा में कुछ एनए मान हैं और इसलिए फ़ंक्शन एक त्रुटि फेंकता है।आर फ़ंक्शन prcomp एनए के मानों के साथ विफल रहता है भले ही एनए की अनुमति है

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10)) 

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

d$V1[5] <- NA 
d$V2[7] <- NA 

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

मैं मैक ओएस एक्स के लिए नवीनतम अनुसंधान संस्करण 2.15.1 उपयोग कर रहा हूँ: na.action परिभाषित भी काम करने के लिए नहीं लगता है, हालांकि यह मदद फ़ाइल ?prcomp

यहाँ में बताया गया है मेरे उदाहरण है

क्या कोई कारण देख सकता है जबकि prcomp विफल रहता है?

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10)) 

result <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit) 

result$x 

d$V1[5] <- NA 

result <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit) 

result$x 

यह PC1 और PC2 में पंक्ति 5 बनाए रखने के लिए संभव है:

यह मेरा नया उदाहरण है? मेरे वास्तविक डेटा सेट में मेरे पास चर के दो से अधिक कॉलम हैं और उनमें से कुछ केवल गायब हैं और मैं अन्य मूल्यों में छिपी हुई शेष जानकारी खोना नहीं चाहता हूं!

उत्तर

12

हाँ, यह एक "फीचर" (बग) जैसा दिखता है कि na.action पूरी तरह से अनदेखा किया जाता है जब तक आप formula इंटरफ़ेस का उपयोग नहीं करते। यह brought up before on the R Development list रहा है।

मुझे लगता है कि इसे एक बग के रूप में दस्तावेज या फ़्लैग किया जाना चाहिए।

बस स्पष्ट होना, इस काम करेगा, क्योंकि यह सूत्र इंटरफ़ेस तक पहुँचता है:

prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit) 
+0

ठीक शानदार। फार्मूला दृष्टिकोण के लिए धन्यवाद! – user969113

+2

मैं मानता हूं कि इसे दस्तावेज किया जाना चाहिए (मैं आर विकास सूची पर पूछताछ का लेखक हूं); आगे बढ़ने का सबसे अच्छा तरीका, अगर कोई चाहता था, तो दस्तावेज में बदलाव का प्रस्ताव देना होगा और इसे आर-डेवेल सूची (और/या आर बग ट्रैकर) में जमा करना होगा। –

8

एक अन्य समाधान यदि आप सूत्र इंटरफ़ेस का उपयोग करने के लिए तैयार नहीं कर रहे हैं

prcomp(na.omit(d), center = TRUE, scale = TRUE) 

जो लागू करने से मिलकर है na.omit सीधे डेटा फ्रेम पर।

+0

आपके समाधान के लिए भी धन्यवाद। मुझे अभी एहसास हुआ कि na.omit परिणामों का उपयोग कम प्रिंसिपल घटकों में किया जाता है। मैंने अभी ऊपर अपना उदाहरण संपादित किया है। – user969113

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