向量基础
向量类型
- 原子向量:逻辑型、整型、双精度型、字符型、复数型、原始型
- 列表
向量属性
- 类型 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练习题
- 前者意思是是否是双精度型的正数。返回逻辑值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
- 此函数检查二者是否在一个可容忍的范围内,.Machine$double.eps是计算机中最小的浮点数
- 整型向量可能有的值有 ±2^31-1个,那一个是NA_integer_
双精度型可能有的值是2^64个 - 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练习题
- mean(is.na(x))计算x中缺失值的占比
sum(!is.finite(x))计算向量中 NA,NaN,Inf的总和 - 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 - 二者最大区别是,purrr::set_names()可以允许函数或者公式转化名字
当名称比向量短时,setNames()会返回缺失值,purrr::set_names()返回错误
递归向量
list()函数创建列表
列表可视化
列表用圆角矩形,原子向量用直角矩阵
特性
attr()读取和设置单个特性值
名称、维度、类
扩展向量
因子、日期、时间、tibble