zoukankan      html  css  js  c++  java
  • read.table函数详解。[转载]

    函数 read.table 是读取矩形格子状数据最为便利的方式。因为实际可能 遇到的情况比较多,所以预设了一些函数。这些函数调用了 read.table 但改变了它的一些默认参数。
    注意,read.table 不是一种有效地读大数值矩阵的方法: 见下面的 scan 函数。
    一些需要考虑到问题是:
    • 编码问题如果文件中包含非-ASCII字符字段,要确保以正确的编码方式读取。 这是在UTF-8的本地系统里面读取Latin-1文件的一个主要问题。 此时,可以如下处理
                read.table(file("file.dat", encoding="latin1"))     
      注意,这在任何可以呈现Latin-1名字的本地系统里面运行。
    • 首行问题我们建议你明确地设定 header 参数。按照惯例,首行只有对应列的字段而 没有行标签对应的字段。因此,它会比余下的行少一个字段。 (如果需要在 R 里面看到这一行,设置 header = TRUE。) 如果要读取的文件里面有行标签的头字段(可能是空的), 以下面的方式读取
                read.table("file.dat", header = TRUE, row.names = 1)     列名字可以通过 col.names 显式地设定; 显式设定的名字会替换首行里面的列名字(如果存在的话)。
    • 分隔符问题通常,打开文件看一下就可以确定文件所使用的字段分隔符, 但对于空白分割的文件,可以选择默认的sep = "" ( 它能使用任何空白符作为分隔符,比如空格,制表符,换行符), sep = " " 或者 sep = " "。 注意,分隔符的选择会影响输入的被引用的字符串。
      如果你有含有空字段的制表符分割的文件, 一定要使用 sep = " "。
    • 引用 默认情况下,字符串可以被 " 或 ' 括起,并且两种情况下,引号内部的字符都作为 字符串的一部分。有效的引用字符(可能没有)的设置由 参数 quote 控制。对于sep = " ", 默认值改为 quote = ""。如果没有设定分隔字符,在被引号括起的字符串里面,引号需要用 C格式的逃逸方式逃逸,即在引号前面直接加反斜杠 。
      如果设定了分隔符,在被引号括起的字符串里面,按照电子表格的习惯, 把引号重复两次以达到逃逸的效果。例如
                '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 的 顺序依次判断字段类型。1如果所有这些类型都失败了, 变量会转变成因子。
      参数 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, , f, , , , v,八进制和十六进制如 40 和 x2A 一样描述。任何其它逃逸字符都看着是自己,包括反斜杠。

    常用函数 read.csv 和 read.delim 为 read.table 设定参数以符合英语语系本地系统中电子表格导出的CSV和制表符分割的文件。 这两个函数对应的变种 read.csv2 和 read.delim2 是针对在逗号作为小数点的国家使用时设计的2
    如果 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 可以进一步的深入研究问题所在。

     

  • 相关阅读:
    sort()
    type()
    reverse()
    pop()
    remove()
    max()
    len()
    Ext.Js核心函数( 三)
    聚簇索引和非聚簇索引区别
    Ext.js入门(二)
  • 原文地址:https://www.cnblogs.com/haisen-/p/5007780.html
Copyright © 2011-2022 走看看