मैं एक आर पैकेज लिख रहा हूं जहां आर कोड एक जावा एप्लिकेशन से बात करता है। Java एप्लिकेशन CSV स्वरूपित स्ट्रिंग को आउटपुट करता है और मैं चाहता हूं कि R कोड स्ट्रिंग को सीधे पढ़ने में सक्षम हो और इसे डेटा .frame में परिवर्तित कर सके।
मैं एक आर पैकेज लिख रहा हूं जहां आर कोड एक जावा एप्लिकेशन से बात करता है। Java एप्लिकेशन CSV स्वरूपित स्ट्रिंग को आउटपुट करता है और मैं चाहता हूं कि R कोड स्ट्रिंग को सीधे पढ़ने में सक्षम हो और इसे डेटा .frame में परिवर्तित कर सके।
जवाबों:
7-वर्षीय उत्तर का संपादन: अब तक, यह उस तर्क के लिए बहुत सरल है, text=
जो इसमें read.csv()
और एक जैसे जोड़े गए हैं :
R> data <- read.csv(text="flim,flam
+ 1.2,2.2
+ 77.1,3.14")
R> data
flim flam
1 1.2 2.20
2 77.1 3.14
R>
हां, आर के लिए सहायता देखें textConnection()
- आर में बहुत शक्तिशाली धारणा यह है कि अनिवार्य रूप से सभी पाठक (जैसे कि read.table()
और इसके वेरिएंट) इन कनेक्शन ऑब्जेक्ट तक पहुंचते हैं जो एक फ़ाइल, या एक दूरस्थ URL, या किसी अन्य ऐप से आने वाला पाइप हो सकता है। या ... आपके मामले में जैसा कुछ पाठ है।
एक ही चाल तथाकथित दस्तावेजों के लिए प्रयोग किया जाता है:
> lines <- "
+ flim,flam
+ 1.2,2.2
+ 77.1,3.14
+ "
> con <- textConnection(lines)
> data <- read.csv(con)
> close(con)
> data
flim flam
1 1.2 2.20
2 77.1 3.14
>
ध्यान दें कि यह कुछ बनाने का एक सरल तरीका है लेकिन यह सभी डेटा के बार-बार पार्स करने के कारण महंगा भी है । जावा से आर तक पहुंचने के अन्य तरीके हैं, लेकिन यह आपको जल्दी से जाना चाहिए। दक्षता आगे आती है ...
ध्यान दें कि आर के अब-वर्तमान संस्करणों में, आपको अब इसकी आवश्यकता नहीं है textConnection()
, बस यह करना संभव है:
> states.str='"State","Abbreviation"
+ "Alabama","AL"
+ "Alaska","AK"
+ "Arizona","AZ"
+ "Arkansas","AR"
+ "California","CA"'
> read.csv(text=states.str)
State Abbreviation
1 Alabama AL
2 Alaska AK
3 Arizona AZ
4 Arkansas AR
5 California CA
हाँ। उदाहरण के लिए:
string <- "this,will,be\na,data,frame"
x <- read.csv(con <- textConnection(string), header=FALSE)
close(con)
#> x
# V1 V2 V3
#1 this will be
#2 a data frame
मान लीजिए कि आपके पास tommy.csv नामक एक फ़ाइल है (हाँ, कल्पनाशील, मुझे पता है ...) जिसमें सामग्री है
col1 col2 \ n 1 1 \ n 2 2 \ n 3 3
जहां प्रत्येक पंक्ति को एक एस्केप कैरेक्टर "\ n" के साथ अलग किया जाता है।
इस फ़ाइल को allowEscapes
तर्क की मदद से पढ़ा जा सकता है read.table
।
> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE)
col1 col2
1 col1 col2
2 1 1
3 2 2
4 3 3
यह सही नहीं है (स्तंभ नामों को संशोधित करें ...), लेकिन यह एक शुरुआत है।
एक स्पष्ट दृष्टिकोण का उपयोग करके, आप केवल एक पाठ मान निर्दिष्ट कर सकते हैं
library(readr)
read_csv(file = "col1, col2\nfoo, 1\nbar, 2")
# A tibble: 2 x 2
col1 col2
<chr> <dbl>
1 foo 1
2 bar 2
यह फ़ंक्शन डिर्क के उत्तर को सुविधाजनक रूप में लपेटता है। एसओ पर सवालों के जवाब देने के लिए यह शानदार है, जहां पूछने वाले ने सिर्फ ऑनस्क्रीन डेटा डंप किया है।
text_to_table <- function(text, ...)
{
dfr <- read.table(tc <- textConnection(text), ...)
close(tc)
dfr
}
इसका उपयोग करने के लिए, पहले ऑनस्क्रीन डेटा कॉपी करें और अपने टेक्स्ट एडिटर में पेस्ट करें।
फू बार बाज
1 1 2
3 3 बी
अब इसके लिए text_to_table
, उद्धरण और किसी भी अन्य तर्क के साथ लपेटें read.table
।
text_to_table("foo bar baz
1 2 a
3 4 b", header = TRUE)