北京大学生物信息平台论坛

 找回密码
 立即注册
搜索
热搜: 通知 活动

R 学习笔记:数据类型与存储

[复制链接]
wolf 发表于 2016-4-12 00:07:36 | 显示全部楼层 |阅读模式
                    R 数据类型
R 的数据存储类型
基本类型
最基本的类型是存储单一数值的类型. 主要包括 Numeric, Integer, Complex, Character, Logical 等.
Numeric 或者 "double" 是 R 优先选择的存储数值的方式, 相当于 C 中的 "double". 需要注意的是, 有的时候认为 Numeric 是 "integer" 和 "double" 的统称. .Machine$double.double.eps 等变量给出环境中的存储 double 的限度.
Integer 是整数, 相当于 C 中的 "int". 一般不管有没有小数点的数字, R 默认存成 Numeric, 这个时候需要使用 as.integer 函数强制去把数存为 Integer. .Machine$integer.max 给出能够存储的最大的整数, 总是 2^31 - 1 = 2147483647 .
Complex 是复数的存储形式.
Character 是存储字符和字符串的类型.
Logical 是存储 bool 值的类型, 只有 TRUE (T) 和 FALSE (F) 两个值.

组合类型
数据往往不是单一的值, R 有很好的存储多值数据的类型.
vector, 向量, 类似一维的 array, 存储相同的基本类型, 如果有字符型的元素, 则所有的值都会转为字符型. as.vector, is.vector 可以帮助建立和判断
matrix, 二维的 array, 所有的元素都是相同类型. as.matrix, is.matrix.
array, 可以有很多维.
list, 可以把不同类型的变量组合在一起, list 中也可以包含子 list.
data.frame, 是一种特别的 list, 其像 matrix 一样限制了每列的变量长度必须要一样, 但同时也像 list 一样, 每一列的变量类型可以不同.

查询变量的类型
常用的查询变量类型的函数有: mode, storage.mode, class 和 typeof. 这些函数有一些差别.
  • storage.mode 是数据实际在内存中存储所采用的方式.
  • class 是面向对象的 R, 比如说 data.frame 实际上的存储方式 (storage.mode) 是 list, 但是为了更好处理表单数据, 就包装成为了 data.frame 类型.
  • mode 和 typeof 给出的结果很接近, 是实际上的类型, 但是在 mode 中, "integer" 和 "double" 都被认为是 "numeric".
如果需要知道环境中每个基本类型能存储的大小, 可以查询 .Machine 这个 list, 相应的大小存储在该 list 中.

NA
由于种种原因, 数据中可能会出现缺失值的情况, R 会用 NA 来替代相应的空值. 如果是计算后产生的空值, 则会用 Inf 或者 NaN 来代替. 处理空值是数据分析中的必要部分.
  • 判断 NA 可以使用 is.na 或者 is.nan 函数, 其中 is.na 会把 NA, Inf, NaN 都认为是 NA, 而 is.nan 则只关注 NaN.
  • mean, var, sum, min, max, 等函数都有 na.rm 参数, 设置成真, 则会在计算的时候把 NA 给除去.
  • lm, glm, gam 等函数有 na.action 参数, 该参数接受函数作为变量, 如 na.omit, na.fail. na.pass, na.exculde 等.
  • na.omit 和 complete.cases 都可以返回一个只包含完整数据行的 data.frame, 也就是说如果一行中有一个或多个 NA, 该行就会被剔除.
  • 对于 read.table 等函数可以使用 na.strings 可以把特定的数值或字符认为是 NA.
        

回复

使用道具 举报

北京大学生物信息平台论坛

GMT+8, 2017-11-19 22:10 , Processed in 0.085149 second(s), 23 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表