2010-10-14 21 views
60

मैं एक आर पैकेज लिख रहा हूं जहां आर कोड जावा एप्लिकेशन से बात करता है। जावा एप्लिकेशन एक CSV स्वरूपित स्ट्रिंग आउटपुट करता है और मैं चाहता हूं कि आर कोड स्ट्रिंग को सीधे पढ़ने और इसे डेटा.फ्रेम में परिवर्तित करने में सक्षम हो।क्या आर में फ़ाइल की बजाय स्ट्रिंग मान से पढ़ने के लिए read.csv का उपयोग करने का कोई तरीका है?

+0

आप के बजाय rJava पैकेज का उपयोग कर सकते हैं? –

+0

शायद आप allowEscapes (read.table में) के साथ चारों ओर झुका सकते हैं। बस सुनिश्चित करें कि जावा आउटपुट लाइनों को तोड़ने के लिए \ n का उपयोग करता है। –

+0

@ जोशुआ मैं अपने जावा प्रोग्राम से बात करने के लिए आरजेवा का उपयोग कर रहा हूं। मुझे लगता है कि आर –

उत्तर

82

हाँ, textConnection() के लिए मदद को देखो - बहुत शक्तिशाली आर में धारणा है कि अनिवार्य रूप से (read.table() और उसके संस्करण जैसे के रूप में) सभी पाठकों इन कनेक्शन वस्तु, जिसके कारण फ़ाइल हो सकता है, या एक दूरस्थ का उपयोग है यूआरएल, या किसी अन्य ऐप से आने वाली पाइप, या ... आपके मामले में कुछ पाठ।

एक ही चाल यहाँ तथाकथित दस्तावेज़ों के लिए प्रयोग किया जाता है:

> 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 
> 

ध्यान दें कि यह एक सरल कुछ के निर्माण के लिए रास्ता है, लेकिन यह भी सभी के बार-बार पार्स की वजह से महंगा है डेटा। जावा से आर तक पहुंचने के अन्य तरीके हैं, लेकिन इससे आपको जल्दी से जाना चाहिए। क्षमता अगले आता है ...

एक 7 वर्षीय जवाब संपादित करना: अब तक, यह जो read.csv() और समान रूप से जोड़ दिया गया है text= तर्क को ज्यादा सरल धन्यवाद है:

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> 
+8

हाल के आर संस्करणों में एक सरल तंत्र है, इस धागे में @ एडम ब्रैडली द्वारा उत्तर देखें: http://stackoverflow.com/a/16349171/17523 –

4

हाँ। उदाहरण के लिए:

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 
1

मान लीजिए आप एक फ़ाइल बुलाया tommy.csv है (हाँ, कल्पनाशील, मुझे पता है ...)

col1 col2 \ n 1 1 \ N 2 की सामग्री है कि 2 \ n 3 3

जहां प्रत्येक पंक्ति एक बचने वाले चरित्र "\ n" से अलग होती है।

यह फ़ाइल read.table में allowEscapes तर्क की सहायता से पढ़ी जा सकती है।

> read.table("tommy.csv", header = TRUE, allowEscapes = TRUE) 

    col1 col2 
1 col1 col2 
2 1 1 
3 2 2 
4 3 3 

यह सही नहीं है (कॉलम नाम संशोधित करें ...), लेकिन यह एक शुरुआत है।

0

यह फ़ंक्शन डिर्क के उत्तर को सुविधाजनक रूप में लपेटता है। एसओ पर सवालों के जवाब देने के लिए यह शानदार है, जहां पूछने वाले ने सिर्फ स्क्रीन पर डेटा डाला है।

text_to_table <- function(text, ...) 
{ 
    dfr <- read.table(tc <- textConnection(text), ...) 
    close(tc) 
    dfr 
} 

इसका उपयोग करने के लिए, पहले ऑनस्क्रीन डेटा कॉपी करें और अपने टेक्स्ट एडिटर में पेस्ट करें।

foo बार baz
1 2 एक
3 4 ख

अब text_to_table, उद्धरण और read.table के लिए किसी अन्य तर्क के साथ लपेट।

text_to_table("foo bar baz 
1 2 a 
3 4 b", header = TRUE) 
70

ध्यान दें कि आर के अब वर्तमान संस्करण में, आप अब 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 
+5

मुझे पता है कि यह थोड़ा देर हो चुकी है लेकिन - शायद यह उपयोगी हो सकती है इसे स्वीकार किए गए उत्तर में एक संपादन के रूप में सबमिट करने के लिए, क्योंकि यह संभावना नहीं है कि ओपी अब स्वीकार किए गए उत्तर को बदल देगा, फिर भी यह अब बेहतर उत्तर लगता है? – obfuscation

+1

आईएमएचओ, ओपी को स्वीकार किए गए उत्तर को अस्वीकार कर देना चाहिए, और इसे स्वीकार करना चाहिए ... – Mischa

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

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