函数 read.table
是读取矩形格子状数据最为便利的方式。由于实际可能遇到的状况比较多,因此预设了一些函数。这些函数调用了 read.table
但改变了它的一些默认参数。安全
注意,read.table
不是一种有效地读大数值矩阵的方法:见下面的 scan
函数。函数
一些须要考虑到问题是:编码
若是文件中包含非-ASCII字符字段,要确保以正确的编码方式读取。这是在UTF-8的本地系统里面读取Latin-1文件的一个主要问题。此时,能够以下处理spa
read.table(file("file.dat", encoding="latin1"))
注意,这在任何能够呈现Latin-1名字的本地系统里面运行。操作系统
咱们建议你明确地设定 header
参数。按照惯例,首行只有对应列的字段而没有行标签对应的字段。所以,它会比余下的行少一个字段。(若是须要在 R 里面看到这一行,设置 header = TRUE
。)若是要读取的文件里面有行标签的头字段(多是空的),如下面的方式读取设计
read.table("file.dat", header = TRUE, row.names = 1)
列名字能够经过 col.names
显式地设定;显式设定的名字会替换首行里面的列名字(若是存在的话)。code
一般,打开文件看一下就能够肯定文件所使用的字段分隔符,但对于空白分割的文件,能够选择默认的sep = ""
(它能使用任何空白符做为分隔符,好比空格,制表符,换行符), sep = " "
或者 sep = "\t"
。注意,分隔符的选择会影响输入的被引用的字符串。blog
若是你有含有空字段的制表符分割的文件,必定要使用 sep = "\t"
。ip
quote
控制。对于sep = "\n"
,默认值改成 quote = ""
。 若是没有设定分隔字符,在被引号括起的字符串里面,引号须要用 C格式的逃逸方式逃逸,即在引号前面直接加反斜杠 \。element
若是设定了分隔符,在被引号括起的字符串里面,按照电子表格的习惯,把引号重复两次以达到逃逸的效果。例如
'One string isn''t two',"one more"
能够被下面的命令读取
read.table("testfile", sep = ",")
这在默认分隔符的文件里面不起做用。
NA
表示缺损值,可是,这能够经过参数 na.strings
改变。参数 na.strings
是一个能够包括一个或多个缺损值得字符描述方式的向量。 数值列的空字段也被看做是缺损值。
在数值列,值 NaN
,Inf
和 -Inf
均可以被接受的。
从一个电子表格中导出的文件一般会把拖尾的空字段(包括?堑姆指舴? 忽略掉。为了读取这样的文件,必须设置参数 fill = TRUE
。
若是设定了分隔符,字符字段起始和收尾处的空白会做为字段一部分看待的。为了去掉这些空白,可使用参数 strip.white = TRUE
。
默认状况下,read.table
忽略空白行。这能够经过设置 blank.lines.skip = FALSE
来改变。但这个参数只有在和 fill = TRUE
共同使用时才有效。这时,多是用空白行代表规则数据中的缺损样本。
除非你采起特别的行动,read.table
将会为数据框的每一个变量选择一个合适的类型。若是字段没有缺损以及不能直接转换,它会按 logical
, integer
,numeric
和 complex
的顺序依次判断字段类型。若是全部这些类型都失败了,变量会转变成因子。
参数 colClasses
和 as.is
提供了很大的控制权。 as.is
会 抑制字符向量转换成因子(仅仅这个功能)。 colClasses
运行为输入中的每一个列设置须要的类型。
注意,colClasses
和 as.is
对每 列专用,而不是每个变量。所以,它对行标签列也一样适用(若是有的话)。
默认状况下,read.table
用 # 做为注释标识字符。若是碰到该字符(除了在被引用的字符串内),该行中随后的内容将会被忽略。只含有空白和注释的行被看成空白行。
若是确认数据文件中没有注释内容,用 comment.char = ""
会比较安全 (也可能让速度比较快)。
许多操做系统有在文本文件中用反斜杠做为逃逸标识字符的习惯,可是Windows系统是个例外(在路径名中使用反斜杠)。在 R 里面,用户能够自行设定这种习惯是否用于数据文件。
read.table
和 scan
都有一个逻辑参数 allowEscapes
。从 R 2.2.0 开始,该参数默认为否,并且反斜杠是惟一被解释为逃逸引用符的字符(在前面描述的环境中)。若是该参数设为是,以C形式的逃逸规则解释,也就是控制符如 \a, \b, \f, \n, \r, \t, \v
,八进制和十六进制如 \040
和 \0x2A
同样描述。任何其它逃逸字符都看着是本身,包括反斜杠。
经常使用函数 read.csv
和 read.delim
为 read.table
设定参数以符合英语语系本地系统中电子表格导出的CSV和制表符分割的文件。这两个函数对应的变种read.csv2
和 read.delim2
是针对在逗号做为小数点的国家使用时设计的。
若是 read.table
的可选项设置不正确,错误信息一般如下面的形式显示
Error in scan(file = file, what = what, sep = sep, : line 1 did not have 5 elements
或者
Error in read.table("files.dat", header = TRUE) : more columns than column names
这些信息可能足以找到问题所在,可是辅助函数 count.fields
能够进一步的深刻研究问题所在。
读大的数据格子(data grid)时,效率最重要。设定 comment.char = ""
,以原子向量类型(逻辑型,整型,数值型,复数型,字符型或原味型)设置每列的colClasses
,给定须要读入的行数 nrows
(适当地高估一点比不设置这个参数好)等措施会提升效率。