我在几种情况下看到,虽然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.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, ...)
}
如前所述,它只是带有一组特定选项的
read.table
。就像@Chase在下面的注释中指出的那样,
read.table()
的帮助页面在Details
下也是如此:read.csv and read.csv2 are identical to read.table except for the defaults. They are intended for reading ‘comma separated value’ files (‘.csv’) or (read.csv2) the variant used in countries that use a comma as decimal point and a semicolon as field separator.
关于r - read.csv与read.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828438/