11--which.min(), which.max()和which()

which(x, arr.ind = FALSE, useNames = TRUE)

  • x 是一个向量或者数组,可以是NA,但会省略掉,相当于FALSE。
  • arr.ind = FALSE 当x是数组时,是否返回数组索引(arr.ind = array indices)

which(), which.max(), which.min()返回的是位置

> which(2:10 > 3)
[1] 3 4 5 6 7 8 9
> m <- matrix(1:12, 3, 4)
> div.3 <- m %% 3 == 0
> which(div.3)
[1] 3 6 9 12
> which(div.3, arr.ind = TRUE)
row col
[1,] 3 1
[2,] 3 2
[3,] 3 3
[4,] 3 4
> which.max(2:4)
[1] 3

12--意外降维(dimension reduction)

提取矩阵中的一行得到向量格式,使用drop参数则可以避免此情况。

> a <- matrix(1:12, ncol = 3)
> b <- a[,1]
> b
[1] 1 2 3 4
> class(b)
[1] "integer"
> c <- a[,1, drop = F]
> c
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
> class(c)
[1] "matrix"

13--列表的递归

列表是可以递归的(recursive),即,列表的组件也可以是列表。

b <- list(u = 5, v = 12)
c <- list(w = 13)
a <- list(b, c)
a
[[1]]
[[1]]$u #此处的 [[1]] 即为b的名字,因为没有给b赋予名字,默认为1
[1] 5 [[1]]$v
[1] 12 [[2]]
[[2]]$w #此处的 [[2]] 同上
[1] 13

14--列表的降维

  • unlist 可以获取列表的 值,返回一个向量。
  • 拼接函数c()在拼接列表时默认得到的还是列表
  • 有一个可选参数recursive,即是否把所有组件元素提取出来,组合成一个向量
  • recursive 仅对列表有效。
> b <- list(u = 5, v = 12)
> unlist(b)
u v
5 12
> c(b)
$u
[1] 5 $v
[1] 12 > c(b,recursive = T)
u v
5 12

15--预先设定空向量

在编写函数时往往需要预先设定一个指定的空向量,这时vector()可以指定它的长度以及类型。

> a <- vector(length = 3, mode = 'character')
> a
[1] "" "" ""
> vector(length = 3, mode = 'list')
[[1]]
NULL [[2]]
NULL [[3]]
NULL
05-11 19:35