R Language
पढ़ने और लिखने के तार
खोज…
टिप्पणियों
संबंधित डॉक्स:
मुद्रण और प्रदर्शित तार
आर में कई अंतर्निहित कार्य होते हैं जिनका उपयोग सूचना को प्रिंट या प्रदर्शित करने के लिए किया जा सकता है, लेकिन print
और cat
सबसे बुनियादी हैं। जैसा कि R एक व्याख्या की गई भाषा है , आप इन्हें सीधे R कंसोल में आज़मा सकते हैं:
print("Hello World")
#[1] "Hello World"
cat("Hello World\n")
#Hello World
दोनों कार्यों के लिए इनपुट और आउटपुट दोनों में अंतर पर ध्यान दें। (नोट: x
के साथ बनाए गए x <- "Hello World"
के मान में कोई उद्धरण-वर्ण नहीं हैं x <- "Hello World"
। वे आउटपुट स्टेज पर print
द्वारा जोड़े जाते हैं।)
cat
तर्क के रूप में एक या अधिक वर्ण वैक्टर लेती है और उन्हें कंसोल पर प्रिंट करती है। यदि वर्ण वेक्टर की लंबाई 1 से अधिक है, तो तर्क एक स्थान से अलग हो जाते हैं (डिफ़ॉल्ट रूप से):
cat(c("hello", "world", "\n"))
#hello world
नई पंक्ति वर्ण ( \n
) के बिना आउटपुट होगा:
cat("Hello World")
#Hello World>
आउटपुट के तुरंत बाद अगले कमांड के लिए संकेत दिखाई देता है। (कुछ कंसोल जैसे कि RStudio का अपने आप स्ट्रिंग्स के लिए एक नईलाइन संलग्न हो सकती है जो एक नई पंक्ति के साथ समाप्त नहीं होती है।)
print
एक "जेनेरिक" फ़ंक्शन का एक उदाहरण है, जिसका अर्थ है कि पारित पहले तर्क के वर्ग का पता लगाया जाता है और आउटपुट के लिए एक क्लास-विशिष्ट विधि का उपयोग किया जाता है। "Hello World"
जैसे चरित्र वेक्टर के लिए, परिणाम cat
के आउटपुट के समान है। हालांकि, चरित्र स्ट्रिंग उद्धृत किया गया है और एक संख्या [1]
एक चरित्र वेक्टर के पहले तत्व को इंगित करने के लिए आउटपुट है (इस मामले में, पहला और एकमात्र तत्व):
print("Hello World")
#[1] "Hello World"
यह डिफ़ॉल्ट प्रिंट विधि वह भी है जो हम देखते हैं जब हम आर को एक चर प्रिंट करने के लिए कहते हैं। ध्यान दें कि टाइपिंग s
का आउटपुट कॉलिंग print(s)
या print("Hello World")
:
s <- "Hello World"
s
#[1] "Hello World"
या बिना कुछ बताए भी:
"Hello World"
#[1] "Hello World"
हम (प्रयोग करके वेक्टर के एक दूसरे तत्व के रूप में एक और चरित्र स्ट्रिंग जोड़ देते हैं तो c()
सी के लिए एक साथ तत्वों oncatenate समारोह), तो के व्यवहार print()
के उस से काफी कुछ अलग दिखाई देता cat
:
print(c("Hello World", "Here I am."))
#[1] "Hello World" "Here I am."
निरीक्षण करें कि c()
फ़ंक्शन स्ट्रिंग-कॉन्टेनेशन नहीं करता है। (किसी को उस उद्देश्य के लिए paste
का उपयोग करने की आवश्यकता है।) आर दिखाता है कि चरित्र वेक्टर में अलग से उद्धृत करके दो तत्व हैं। यदि हमारे पास एक वेक्टर है जो कई लाइनों को फैलाता है, तो आर प्रत्येक लाइन को शुरू करने वाले तत्व के सूचकांक को प्रिंट करेगा, जैसा कि यह पहली पंक्ति के शुरू में [1]
प्रिंट करता है।
c("Hello World", "Here I am!", "This next string is really long.")
#[1] "Hello World" "Here I am!"
#[3] "This next string is really long."
print
का विशेष व्यवहार फ़ंक्शन को दी गई ऑब्जेक्ट की श्रेणी पर निर्भर करता है।
यदि हम किसी भिन्न वर्ग के साथ किसी ऑब्जेक्ट को print
करते हैं, जैसे कि "न्यूमेरिक" या "लॉजिकल", तो उद्धरणों को आउटपुट से छोड़ा जाता है ताकि हम यह संकेत कर सकें कि हम एक ऑब्जेक्ट के साथ काम कर रहे हैं जो कि चरित्र वर्ग नहीं है:
print(1)
#[1] 1
print(TRUE)
#[1] TRUE
फैक्टर ऑब्जेक्ट्स उसी तरह से वर्ण चर के रूप में मुद्रित होते हैं जो अक्सर एसओ प्रश्न निकायों में ऑब्जेक्ट्स प्रदर्शित करने के लिए कंसोल आउटपुट का उपयोग करने पर अस्पष्टता पैदा करते हैं। एक इंटरैक्टिव संदर्भ को छोड़कर cat
या print
का उपयोग करना दुर्लभ है। स्पष्ट रूप से कॉलिंग print()
विशेष रूप से दुर्लभ है (जब तक कि आप उद्धरण की उपस्थिति को दबाना या एक फ़ंक्शन द्वारा invisible
रूप में लौटाए गए ऑब्जेक्ट को नहीं देखना चाहते), क्योंकि कंसोल में foo
में प्रवेश करना print(foo)
लिए एक शॉर्टकट है। आर के इंटरैक्टिव कंसोल को आरईपीएल, एक "रीड-इवल-प्रिंट-लूप" के रूप में जाना जाता है। cat
फ़ंक्शन विशेष उद्देश्यों के लिए सबसे अच्छा बचाया जाता है (जैसे एक खुले फ़ाइल कनेक्शन में आउटपुट लिखना)। कभी-कभी इसका उपयोग फ़ंक्शंस के अंदर किया जाता है (जहां कॉल print()
करने के लिए print()
दबाए जाते हैं, हालाँकि कंसोल के आउटपुट को उत्पन्न करने के लिए फ़ंक्शन के अंदर cat()
का उपयोग करना बुरा व्यवहार है । मध्यवर्ती संदेशों के लिए message()
या warning()
लिए पसंदीदा तरीका है; वे cat
समान व्यवहार करते हैं लेकिन अंत उपयोगकर्ता द्वारा वैकल्पिक रूप से दबाया जा सकता है। अंतिम परिणाम केवल इसलिए लौटाया जाना चाहिए ताकि उपयोगकर्ता इसे आवश्यक होने पर स्टोर करने के लिए असाइन कर सके।
message("hello world")
#hello world
suppressMessages(message("hello world"))
फ़ाइल कनेक्शन से पढ़ना या लिखना
हमेशा हमारे पास स्थानीय सिस्टम पथ से पढ़ने या लिखने की स्वतंत्रता नहीं होती है। उदाहरण के लिए अगर आर कोड स्ट्रीमिंग मैप-कम को फाइल कनेक्शन को पढ़ने और लिखने की आवश्यकता है। अन्य परिदृश्य भी हो सकते हैं जहां कोई स्थानीय प्रणाली से परे जा रहा है और बादल और बड़े डेटा के आगमन के साथ, यह तेजी से सामान्य हो रहा है। ऐसा करने का एक तरीका तार्किक क्रम में है।
फ़ाइल के साथ पढ़ने के लिए फ़ाइल कनेक्शन स्थापित करें file()
कमांड ("r" रीड मोड के लिए है):
conn <- file("/path/example.data", "r") #when file is in local system
conn1 <- file("stdin", "r") #when just standard input/output for files are available
जैसा कि यह केवल फ़ाइल कनेक्शन स्थापित करेगा, कोई इन फ़ाइल कनेक्शनों के डेटा को निम्नानुसार पढ़ सकता है:
line <- readLines(conn, n=1, warn=FALSE)
यहाँ हम n=1
रूप में लाइन द्वारा फाइल कनेक्शन conn
लाइन से डेटा पढ़ रहे हैं। तेजी से पढ़ने के लिए डेटा ब्लॉक पढ़ने के लिए n
(मान 10, 20 आदि) का मान बदल सकता है (एक बार में 10 या 20 लाइन ब्लॉक पढ़ें)। एक ही सेट n=-1
में पूरी फाइल पढ़ने के लिए।
डाटा प्रोसेसिंग या मॉडल निष्पादन के बाद; परिणाम कई अलग-अलग कमांड जैसे कि writeLines(),cat()
आदि का उपयोग करके फ़ाइल कनेक्शन पर वापस लिख सकते हैं जो फ़ाइल कनेक्शन के लिए लिखने में सक्षम हैं। हालाँकि ये सभी कमांड लेखन के लिए स्थापित फ़ाइल कनेक्शन का लाभ उठाएंगे। यह file()
कमांड का उपयोग करके किया जा सकता है:
conn2 <- file("/path/result.data", "w") #when file is in local system
conn3 <- file("stdout", "w") #when just standard input/output for files are available
फिर निम्नानुसार डेटा लिखें:
writeLines("text",conn2, sep = "\n")
ऑपरेटिंग सिस्टम कमांड का आउटपुट कैप्चर करें
कार्य जो एक चरित्र वेक्टर लौटाते हैं
बेस R
में सिस्टम कमांड को लागू करने के दो कार्य हैं। सिस्टम कमांड के आउटपुट को कैप्चर करने के लिए दोनों को एक अतिरिक्त पैरामीटर की आवश्यकता होती है।
system("top -a -b -n 1", intern = TRUE)
system2("top", "-a -b -n 1", stdout = TRUE)
दोनों एक चरित्र वेक्टर लौटाते हैं।
[1] "top - 08:52:03 up 70 days, 15:09, 0 users, load average: 0.00, 0.00, 0.00"
[2] "Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie"
[3] "Cpu(s): 0.9%us, 0.3%sy, 0.0%ni, 98.7%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st"
[4] "Mem: 12194312k total, 3613292k used, 8581020k free, 216940k buffers"
[5] "Swap: 12582908k total, 2334156k used, 10248752k free, 1682340k cached"
[6] ""
[7] " PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND "
[8] "11300 root 20 0 1278m 375m 3696 S 0.0 3.2 124:40.92 trala "
[9] " 6093 user1 20 0 1817m 269m 1888 S 0.0 2.3 12:17.96 R "
[10] " 4949 user2 20 0 1917m 214m 1888 S 0.0 1.8 11:16.73 R "
चित्रण के लिए, UNIX कमांड
top -a -b -n 1
का उपयोग किया जाता है। यह OS विशिष्ट है और आपके कंप्यूटर पर उदाहरणों को चलाने के लिए इसमें संशोधन करने की आवश्यकता हो सकती है।
पैकेज devtools
में एक सिस्टम कमांड चलाने और अतिरिक्त पैरामीटर के बिना आउटपुट को कैप्चर करने के लिए एक फ़ंक्शन है। यह एक चरित्र वेक्टर भी देता है।
devtools::system_output("top", "-a -b -n 1")
कार्य जो डेटा फ़्रेम लौटाते हैं
fread
पैकेज में समारोह data.table
एक शेल कमांड निष्पादित करने के लिए और इस तरह उत्पादन को पढ़ने के लिए अनुमति देता है read.table
। यह एक data.table
या एक data.frame
।
fread("top -a -b -n 1", check.names = TRUE)
PID USER PR NI VIRT RES SHR S X.CPU X.MEM TIME. COMMAND
1: 11300 root 20 0 1278m 375m 3696 S 0 3.2 124:40.92 trala
2: 6093 user1 20 0 1817m 269m 1888 S 0 2.3 12:18.56 R
3: 4949 user2 20 0 1917m 214m 1888 S 0 1.8 11:17.33 R
4: 7922 user3 20 0 3094m 131m 1892 S 0 1.1 21:04.95 R
ध्यान दें, कि fread
ने स्वचालित रूप से शीर्ष 6 हेडर लाइनों को छोड़ दिया है।
यहाँ पैरामीटर
check.names = TRUE
को%CPU
,%MEN
औरTIME+
को रूपांतरित वैध कॉलम नामों में जोड़ा गया।