R: Почему read.table перестает читать файл?

У меня есть файл под названием 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.fram значительно меньше количества строк в моем текстовом файле:

> 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

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

С read.delim символ defualt quote является двойной цитатой, и, следовательно, это не проблема.

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

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