2010-06-10 16 views
11

मेरे पास एक फ़ाइल है, जिसे genes.txt कहा जाता है, जिसे मैं डेटा.फ्रेम बनना चाहता हूं।आर: read.table फ़ाइल को पढ़ने से क्यों रोकता है?

mike$ wc -l genes.txt 
    42476 genes.txt 

मैं आर में एक data.frame मैं आदेश read.table, का उपयोग इस तरह में इस फाइल को पढ़ना चाहते हैं: यह लाइनों का एक बहुत मिला है, प्रत्येक पंक्ति में तीन, टैब सीमांकित क्षेत्रों है:

genes = read.table(
    genes_file, 
    sep="\t", 
    na.strings="-", 
    fill=TRUE, 
    col.names=c("GeneSymbol","synonyms","description") 
) 

ठीक से काम करने लगता है कौन सा है, जहां genes.txt पर genes_file अंक।

> nrow(genes) 
[1] 27896 

और चीजों को मैं पाठ फ़ाइल में पा सकते हैं: लेकिन, मेरा data.frame में लाइनों की संख्या मेरी पाठ फ़ाइल में लाइनों की संख्या से काफी कम है

mike$ grep "SELL" genes.txt 
SELL CD62L|LAM1|LECAM1|LEU8|LNHR|LSEL|LYAM1|PLNHR|TQ1 selectin L 

डॉन ' टी data.frame में होने लगते हैं

> grep("SELL",genes$GeneSymbol) 
integer(0) 

यह पता चला है कि

genes = read.delim(
    genes_file, 
    header=FALSE, 
    na.strings="-", 
    fill=TRUE, 
    col.names=c("GeneSymbol","synonyms","description"), 
) 

बस ठीक काम करता है। Read.delim क्यों पढ़ता है जब read.table नहीं है?

यह उपयोग की है, तो आप निम्न कमांड जो आप एक कमांड लाइन

curl -O ftp://ftp.ncbi.nlm.nih.gov/gene/DATA/gene_info.gz 
gzip -cd gene_info.gz | awk -Ft '$1==9606{print $3 "\t" $5 "\t" $9}' > genes.txt 

चेतावनी दी जानी से चलाना चाहिए का उपयोग कर genes.txt पुन: कर सकते हैं, हालांकि, कि gene_info.gz 101MBish है।

+0

क्या 27897 लाइन पर कुछ खास मौका है जो आयात तोड़ सकता है? मैं अभी फ़ाइल डाउनलोड नहीं कर सकता, अगर आपको अभी तक कोई जवाब नहीं मिला है तो मैं बाद में कोशिश करूंगा। – nico

+0

ऐसा नहीं है कि मैं देख सकता हूं! यह पता चला है कि read.delim ठीक काम करता है, इसलिए यह उससे थोड़ा कम परेशान है। मैंने सवाल को काफी हद तक संपादित किया है (11 लोगों को माफ करना जो इसे जाने के पहले 4 मिनट के भीतर पढ़ते हैं) प्रश्न को फिर से लिखने के लिए read.elim क्यों काम करता है जब read.table विफल रहता है? –

+2

मैंने फ़ाइल को नहीं देखा है लेकिन उद्धरण और टिप्पणियां तोड़ने के लिए दो सामान्य तरीके हैं। उदाहरण के लिए, read.table व्यवहार '#' एक टिप्पणी चरित्र के रूप में जो कई फ़ाइलों के लिए अनुचित है। –

उत्तर

15

read.table के साथ डिफ़ॉल्ट उद्धरण वर्णों में से एक एकल उद्धरण है। मुझे लगता है कि आपके विवरण फ़ील्ड में आपके कुछ बेजोड़ एकल उद्धरण हैं और सिंगल कोट्स के बीच के सभी डेटा को एक प्रविष्टि में एक साथ पूल किया जा रहा है।

read.delim के साथ defualt उद्धरण चरित्र दोहरा उद्धरण है और इस प्रकार यह कोई समस्या नहीं है।

अपना उद्धरण चरित्र निर्दिष्ट करें और आपको पूरा सेट होना चाहिए।

> genes<-read.table("genes.txt",sep="\t",quote="\"",na.strings="-",fill=TRUE, col.names=c("GeneSymbol","synonyms","description")) 
> nrow(genes) 
[1] 42476 
+0

धन्यवाद! मुझे उम्मीद है कि मुझे ध्यान रखना चाहिए कि मेरी अंतिम प्रविष्टि बहुत बड़ी थी! सीखने की अवस्था की खुशी ... –

+0

लर्निंग वक्र के चर्च में शामिल हों। :) –

+0

एक अन्य विकल्प (जिसका मैंने उपयोग किया) उद्धरण = "" सेट करना है और उद्धरण हटाएं। ध्यान दें कि यदि आप fill = TRUE का उपयोग करते हैं तो आपको यह समस्या * चुपचाप * प्राप्त करने की अधिक संभावना होगी। –

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