read.csv与read.table

Ali*_*Ali 17 file-io r 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
Run Code Online (Sandbox Code Playgroud)

read.csv()在同一个文件上完美运行,没有错误.我觉得速度read.csv()也高于read.table().

甚至更多:read.table()读取我的文件非常疯狂.它在读取第100行时会出现此错误,但是当我在相同文件的头部之后复制并粘贴第90行到第110行时,它仍然会出现第100 + 21行的错误(在开头复制新行).如果该行存在任何问题,为什么在开头读取粘贴的行时不报告该错误?我确认read.csv()读取相同的文件没有错误.

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

Ben*_*ker 31

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

特别是,这是完整的定义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, ...)
}
Run Code Online (Sandbox Code Playgroud)

所以说它只是read.table一组特定的选项.

正如@Chase在下面的评论中所述,帮助页面的read.table()说法同样如下Details:

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

  • 很好的答案 - 我只想补充一点,`read.table()`的帮助页面说的详细信息`read.csv和read.csv2与read.table相同,除了默认值.它们用于读取"逗号分隔值"文件('.csv')或(read.csv2)在使用逗号作为小数点和分号作为字段分隔符的国家/地区中使用的变体.所以对于OP - 是的,当你的数据与`read.csv`的默认值不匹配时,你会想要`read.table` (6认同)

had*_*ley 10

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