3 子集选取
3.1 数据类型
值得注意的只有 S3 对象和 S4 对象
- S3 对象是由 atomic vector、array 和 list 组成的,常用方法即可
- S4 对象要用到
@
(等价于$
)和slot()
(等价于[[
)
3.2 子集选取运算符
3.2.1
df <- data.frame(x=1:3,y=I(list(1:2,1:3,1:4)))
df[1,,drop=FALSE]
#> x y
#> 1 1 1, 2
df[1,,drop=TRUE]
#> $x
#> [1] 1
#>
#> $y
#> $y[[1]]
#> [1] 1 2
加入drop=TRUE
选项会去除维度
3.3 应用
3.3.1
构建查询表
3.3.3
setdiff(x,y)
为从 x 中删掉 y
3.3.4
分清逻辑运算符和短路运算符
类别 | 运算符 | 适用类型 |
---|---|---|
逻辑运算符 | & | ! | 适用于向量 |
短路运算符 | && || ! | 适用于标量,条件语句 if |
例: a<1 & b>1
和a<1 && b>1
逻辑运算符会将两侧表达式都计算一遍再返回结果,短路运算符在假如左侧表达式结果为 FALSE 的情况下停止计算,因为此时不论右侧结果是什么,整体结果都会是 FALSE
德-摩根定理:
!(x & y)
等价于!x | !y
!(x | y)
等价于!x & !y
!(x & !(y | z))
等价于!x | !!(y | z)
等价于!x | y | z
3.3.5
x & y
等价于intersect(x,y)
x | y
等价于union(x,y)
#union()
会自动去重x & !y
等价于setdiff(x,y)
# 从x
中删除y
xor(x,y)
等价于setdiff(union(x,y),intersect(x,y))
# 从x|y
中删除x&y
的部分