基本类型
- { : 返回类型与原集合一样,可以提取多个元素
- [[ : list 或者 Dataframe,只能选提取一个元素
- $ : 提取list中的一个元素,且该元素必须有name,返回的类型可能和和原来的不同
> x <- c("a", "b", "c", "c", "d", "a")
> x[1]
[1] "a"
> x[2]
[1] "b"
> x[1:4]
[1] "a" "b" "c" "c"
> x[x > "a"]
[1] "b" "c" "c" "d"
> u <- x > "a" // 判断是否大于a
> u
[1] FALSE TRUE TRUE TRUE TRUE FALSE
> x[u]
[1] "b" "c" "c" "d"
列表
> x <- list(foo = 1:4, bar = 0.6)
> x[1]
$foo
[1] 1 2 3 4 //[ ] 得到的是list列表
> x[[1]]
[1] 1 2 3 4 // [[ ]] 得到的是vector数列
> x$bar
[1] 0.6
> x[["bar"]]
[1] 0.6
> x["bar"] // [ ] 得到的是列表
$bar
[1] 0.6
[[ ]] 和 $ 不能用来获取一个list的多个元素 -> 只能用单方括号 [ ]
> x <- list(foo = 1:4, bar = 0.6, baz = "hello")
> x[c(1, 3)] // 选取第一和第三个元素(foo 和 baz)
$foo
[1] 1 2 3 4
$baz
[1] "hello"
$ 只能用于绝对的名字的索引
> x <- list(foo = 1:4, bar = 0.6, baz = "hello")
> name <- "foo"
> x[[name]] // computed index for ‘foo’
[1] 1 2 3 4
> x$name // element ‘name’ doesn’t exist!
NULL
> x$foo
[1] 1 2 3 4 /// element ‘foo’ does exist
[[ ]] 可提取整数,列表的递归
> x <- list(a = list(10, 12, 14), b = c(3.14, 2.81))
> x[[c(1, 3)]] // 用向量(1,3)选取第一个元素的第3个元素
[1] 14
> x[[1]][[3]]
[1] 14
> x[[c(2, 1)]]
[1] 3.14
矩阵
> x <- matrix(1:6, 2, 3) //建立2行3列 1-6 的矩阵
> x[1, 2]
[1] 3 // 返回数字
> x[2, 1]
[1] 2
> x[1, ] // 提取第一行
[1] 1 3 5
> x[, 2] // 提取第二列
[1] 3 4
By default, when a single element of a matrix is retrieved, it is returned as a vector of length 1 rather
than a 1 × 1 matrix. This behavior can be turned off by setting drop = FALSE.
默认下,当在矩阵中取一个元素的时候,返回的是长度为1的向量,而不是1*1 的矩阵,可以通过“drop=FALSE”修改
> x <- matrix(1:6, 2, 3)
> x[1, 2]
[1] 3 // 默认下,长度为1的向量
> x[1, 2, drop = FALSE]
[,1]
[1,] 3 /// 1*1的矩阵
x <- matrix(1:6, 2, 3)
x[1, ]
[1] 1 3 5 // 返回向量
x[1, , drop = FALSE]
[,1] [,2] [,3]
[1,] 1 3 5 // 返回1*3矩阵
``
模糊匹配
双方括号 [[ 和 $ 可用来模糊匹配
> x <- list(aardvark = 1:5)
> x$a
[1] 1 2 3 4 5
> x[["a"]]
NULL
> x[["a", exact = FALSE]]
[1] 1 2 3 4 5
删除NA
- is.na()
> x <- c(1, 2, NA, 4, NA, 5)
> bad <- is.na(x) // bad->逻辑向量
> x[!bad]
[1] 1 2 4 5
- complete.cases()
> x <- c(1, 2, NA, 4, NA, 5)
> y <- c("a", "b", NA, "d", NA, "f")
> good <- complete.cases(x, y)
> good
[1] TRUE TRUE FALSE TRUE FALSE TRUE
> x[good]
[1] 1 2 4 5
> y[good]
[1] "a" "b" "d" "f"
> airquality[1:6, ]
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> good <- complete.cases(airquality)
> airquality[good, ][1:6, ]
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
7 23 299 8.6 65 5 7