R: Почему read.table прекращает чтение файла? - PullRequest
11 голосов
/ 10 июня 2010

У меня есть файл с именем genes.txt, который я хотел бы стать data.frame.В нем много строк, каждая строка имеет три поля с табуляцией:

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

Я хотел бы прочитать этот файл в data.frame в R. Я использую команду read.table, например,это:

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

Что, кажется, работает нормально, где genes_file указывает на genes.txt.Однако количество строк в моем data.frame значительно меньше количества строк в моем текстовом файле:

> nrow(genes)
[1] 27896

и вещей, которые я могу найти в текстовом файле:

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 нет?

Если он полезен, вы можете воссоздать genes.txt, используя следующие команды, которые следует запускать из командной строки

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

однако следует помнить, что файл gene_info.gz равен 101MBish.

1 Ответ

15 голосов
/ 10 июня 2010

В read.table одним из символов кавычек по умолчанию является одинарная кавычка.Я предполагаю, что у вас есть несколько одинарных кавычек в вашем поле описания, и все данные между одинарными кавычками объединяются в одну запись.

При read.delim символ кавычки по умолчанию является двойной кавычкой, и поэтомуне проблема.

Укажите свой символ кавычки, и все должно быть в порядке.

> genes<-read.table("genes.txt",sep="\t",quote="\"",na.strings="-",fill=TRUE, col.names=c("GeneSymbol","synonyms","description"))
> nrow(genes)
[1] 42476
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...