1106 chapter15 向量

向量基础

向量类型

  • 原子向量:逻辑型、整型、双精度型、字符型、复数型、原始型
  • 列表

向量属性

  • 类型 typeof()
  • 长度 length()

扩展向量4种类型

  • 因子(整型向量)
  • 日期和时间(数值型)
  • 数据框和tibble(列表)

原子向量 → 列表 → 扩展向量

原子向量

逻辑型

FALSE,TRUE,NA

数值型

R默认是双精度型的,创建整型在数值后添加L

二者的区别

  • 双精度是浮点数,比较时不能用 ==,应使用dplyr::near(),可容忍些误差
  • 整型数据有一个NA,双精度型有NA,NaN,Inf,-Inf,不可用==检查,应该用 is.finite(), is,infinite(). is.nan()

字符型

每个唯一的字符串在内存中只保存一次

缺失值

NA,NA_integer_, NA_real_.NA_character_

p204练习题

  1. 前者意思是是否是双精度型的正数。返回逻辑值FALSE,TRUE
    后者与前者的结果相反。|| 答案
> x <- c(0, NA, NaN, Inf, -Inf)
> is.finite(x)
[1]  TRUE FALSE FALSE FALSE FALSE
!is.infinite(x)
[1]  TRUE  TRUE  TRUE FALSE FALSE

is.finite()认为非缺失的数值型是有限的,NA. Inf,-Inf均不是有限的
is.infinite() 认为Inf,-Inf是无限的,其他的包括NA都是有限的
NaN被二者嫌弃,都是FALSE

  1. 此函数检查二者是否在一个可容忍的范围内,.Machine$double.eps是计算机中最小的浮点数
  2. 整型向量可能有的值有 ±2^31-1个,那一个是NA_integer_
    双精度型可能有的值是2^64个
  3. parse_logical()、parse_integer()、parse_integer()、parse_number()

原子向量的使用

强制转换

显式强制转换as.logical()等,还有隐式转换
!!!原子向量中不可包含不同类型的元素,类型是整个向量的属性!

标量与循环

  • 标量is_scalar_atomic()检查长度为1的向量
  • R中,基本数学运算是使用向量来进行
  • R会扩展较短向量,称之为循环

向量命名

创建时命名或者 创建后用 set_names()

向量取子集

filter()只能筛选tibble
筛选向量,[]

  • 使用仅包含整数的数值向量,全为正数、负数、或者0,不可混合。
  • 使用逻辑向量
  • 字符向量
  • 最简方式x[],x若为二维,则 x [1,]取第一行和所有列,x[,-1]则取出所有行和除第一列的所有列
  • [[ ,取出单个元素

p209练习题

  1. mean(is.na(x))计算x中缺失值的占比
    sum(!is.finite(x))计算向量中 NA,NaN,Inf的总和
  2. The function is.vector() only checks whether the object has no attributes other than names. Thus a list is a vector:
    The function is.atomic() explicitly checks whether an object is one of the atomic types (“logical”, “integer”, “numeric”, “complex”, “character”, and “raw”) or NULL
  3. 二者最大区别是,purrr::set_names()可以允许函数或者公式转化名字
    当名称比向量短时,setNames()会返回缺失值,purrr::set_names()返回错误

递归向量

list()函数创建列表

列表可视化

列表用圆角矩形,原子向量用直角矩阵

特性

attr()读取和设置单个特性值
名称、维度、类

扩展向量

因子、日期、时间、tibble

推荐阅读更多精彩内容