read.csv与read.table

read.csv与read.table,r,file-io,read.table,read.csv,R,File Io,Read.table,Read.csv,我在几个案例中看到,虽然read.table()无法读取以制表符分隔的文件(例如微阵列的注释表),但返回以下错误: Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : line xxx did not have yyy elements read.csv()可以在同一个文件上完美地工作,没有错误。我认为read.csv()的速度也高于read.table() 更重要的是:read.tabl

我在几个案例中看到,虽然
read.table()
无法读取以制表符分隔的文件(例如微阵列的注释表),但返回以下错误:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
line xxx did not have yyy elements
read.csv()
可以在同一个文件上完美地工作,没有错误。我认为
read.csv()
的速度也高于
read.table()

更重要的是:
read.table()
正在疯狂地阅读我的文件。读取第100行时会出现此错误,但当我在同一文件头之后复制并粘贴第90行到第110行时,仍会出现第100+21行错误(在开头复制新行)。如果该行有任何问题,为什么在开始读取粘贴的行时不报告该错误?我确认
read.csv()
读取同一文件时没有错误


你知道为什么
read.table()
无法读取与
read.csv()
相同的文件吗?还有什么理由在任何情况下使用
read.table()

read.csv
read.table
的一个相当薄的包装;如果您不能通过向
read.table
提供正确的参数来准确复制
read.csv
的行为,我会非常惊讶。但是,其中一些参数(例如引号或注释字符的处理方式)很可能会改变函数的速度和行为

特别是,这是
read.csv
的完整定义:

function (file, header = TRUE, sep = ",", quote = "\"", dec = ".", 
    fill = TRUE, comment.char = "", ...) {
     read.table(file = file, header = header, sep = sep, quote = quote, 
        dec = dec, fill = fill, comment.char = comment.char, ...)
}
如前所述,它只是带有一组特定选项的read.table

正如@Chase在下面的评论中所述,
read.table()
的帮助页面在
详细信息下所说的一样:

除默认值外,read.csv和read.csv2与read.table相同。它们用于读取“逗号分隔值”文件(“.csv”)或(read.csv2)在使用逗号作为小数点、分号作为字段分隔符的国家/地区使用的变体


不要使用
read.table
读取制表符分隔的文件,请使用
read.delim
。(它只是
read.table
的一个薄薄的包装,但它将选项设置为适当的值)

read\u table()
有时会在tab
sep
'ed文件上失败,设置
sep='\s+'
可能有助于假设表中的项没有空间

很好的答案-我只需添加
read.table()的帮助页面)
表示,除了默认值外,read.csv和read.csv2与read.table下的详细信息相同。它们用于读取“逗号分隔值”文件(“.csv”)或(read.csv2)在使用逗号作为小数点、分号作为字段分隔符的国家/地区使用的变体。
。因此,对于OP-yes,当您的数据与
read.csv
的默认值不匹配时,您可能需要
read.table
,也可以在内存使用情况下阅读
read.table()
的帮助页面,了解为什么大型文件的速度可能较慢。如果没有可复制的示例,我们无法回答您(更新的)问题。最常见的读取问题是:(1)未检测到的注释字符,(2)不匹配的引号,(3)当
fill=TRUE
时,文件前5行后每行字段数的变化。因为
read.csv
read.table
对于
comment
quote
fill
有不同的默认值,其中任何一个都可能是问题所在。PS有8种组合的
注释
/
引用
/
填充
:您可以对所有这些组合进行实验,看看结果如何不同——这可能会引导您找到答案
count.fields()
对于诊断也很方便。我遇到的每一位R专家的集体经验都让我开发了一个Previor,用于解决此类问题,它基本上由“文件中有一个奇怪的行/字符”上的无限质量函数组成,
read.table
read.csv
没有问题。我不知道如何在上面共享文件