आर

2015-08-08 5 views
5

साथ एक अंकीय वेक्टर में अंकों की संख्या की गणना मैं आर में संख्यात्मक का एक वेक्टर है:आर

c(0.9, 0.81) 

और मैं इस वेक्टर में प्रत्येक तत्व के लिए अंकों की संख्या को निकालने के लिए चाहते हैं। कमांड वापस आएगा, इस मामले में, 1 और 2 क्योंकि अंक 9 और 81 हैं। क्या ऐसा करने का कोई सुविधाजनक तरीका है? इसके अलावा, यदि परिणाम 1 है, तो मैं दो अंकों तक कैसे विस्तार कर सकता हूं? उदाहरण के लिए, मैं चाहता हूँ एक लौटे वेक्टर

c(0.90, 0.81) 
+1

कोशिश 'प्रारूप (v1, nsmall = 2)' मुद्रण या 'sprintf के लिए' करो आप इसे 'न्यूमेरिक' कक्षा के रूप में वापस करना चाहते हैं? शायद 'राउंड (v1,2) ' – akrun

+0

कंसोल में' v' टाइप करें और आपको' 0.90' और '0.81' मिलेगा। वेक्टर स्वचालित रूप से वेक्टर में किसी एक संख्या के अंकों की उच्चतम संख्या वाले सभी तत्वों को प्रिंट करता है। –

उत्तर

3
x <- c(0.9,0.81,32.52,0); 
nchar(sub('^0+','',sub('\\.','',x))); 
## [1] 1 2 4 0 

यह दशमलव बिंदु स्ट्रिप्स, तो सभी स्ट्रिप्स अग्रणी शून्य, और अंत में महत्वपूर्ण अंकों की संख्या की गणना करने के अप्रत्यक्ष माध्यम के रूप में स्ट्रिंग लंबाई का उपयोग करता है। यह स्वाभाविक रूप से शून्य इनपुट के लिए शून्य देता है, लेकिन आप उस मामले के लिए स्पष्ट रूप से परीक्षण करने के लिए if अभिव्यक्ति का उपयोग कर सकते हैं और यदि आप चाहें तो इसके बदले में वापस आ सकते हैं।

akrun उल्लेख किया है दशमलव के बाद दो अंकों के साथ मुद्रण के लिए,: ('।% 2f', v1)

sprintf('%.2f',x); 
## [1] "0.90" "0.81" "32.52" "0.00" 
6

दशमलव के बाद अंक गिनती करने के लिए हो सकता है, आप उपयोग कर सकते nchar

sapply(v, nchar) - 2 # -2 for "." and leading 0 
# 1 2 
+3

या 'nchar (sub ('। * \\।', '', V1)) 'बीटीडब्ल्यू,' nchar (v1) -2' – akrun

+3

भी काम करना चाहिए आपको यह उल्लेख करने की आवश्यकता हो सकती है कि यह सामान्य नहीं है। उदाहरण के लिए '32.52' – akrun

+0

@क्रुन हां, जैसा कि अक्रुन कहते हैं – jenesaisquoi