Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:为什么read.table停止读取文件?_R - Fatal编程技术网

R:为什么read.table停止读取文件?

R:为什么read.table停止读取文件?,r,R,我有一个文件,名为genes.txt,我想把它变成data.frame。它有很多行,每行有三个制表符分隔的字段: mike$ wc -l genes.txt 42476 genes.txt 我想将此文件读入R中的data.frame。我使用命令read.table,如下所示: genes = read.table( genes_file, sep="\t", na.strings="-", fill=TRUE, col.names=c("Ge

我有一个文件,名为
genes.txt
,我想把它变成data.frame。它有很多行,每行有三个制表符分隔的字段:

mike$ wc -l genes.txt
   42476 genes.txt
我想将此文件读入R中的data.frame。我使用命令read.table,如下所示:

genes = read.table(
    genes_file, 
    sep="\t", 
    na.strings="-", 
    fill=TRUE,
    col.names=c("GeneSymbol","synonyms","description")
)
这似乎很好,其中
genes\u文件
指向
genes.txt
。但是,my data.frame中的行数明显少于我的文本文件中的行数:

> nrow(genes)
[1] 27896
mike$ grep "SELL" genes.txt 
SELL    CD62L|LAM1|LECAM1|LEU8|LNHR|LSEL|LYAM1|PLNHR|TQ1    selectin L
我可以在文本文件中找到:

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

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

>genesIs第27897行有什么特别的东西可能会破坏导入?我现在无法下载该文件,如果您还没有收到答复,我将稍后再试。我看不到!事实证明read.delim工作得很好,所以这比以前稍微不那么烦人。我对这个问题进行了大量的编辑(向在开始的前4分钟内阅读它的11个人表示歉意),将问题重新表述为当read.table失败时为什么read.delim可以工作?我没有查看文件,但引用和评论是两种常见的破坏方式。例如,read.table将“#”视为注释字符,这不适合于许多文件。谢谢!我想我应该注意到我的最终作品是巨大的!学习曲线的乐趣……加入学习曲线教会。:)另一个选项(我使用的)是设置quote=“”,然后简单地删除引号。请注意,如果使用fill=TRUE,则更有可能以静默方式解决此问题。