R语言

R语言: list

2023-07-14  本文已影响0人  LET149
  • 列表中可以存放大量的数据,每组数据我们记为一个元素(列表中的元素),重要的是列表中元素的长度可以是不一样的
  • 数据框是各元素长度相同的列表
aa <- list(bb=c(1,3,4),cc=c(1:15),dd=c("good","bad"))

取值

#单层列表的取值
> ll <- list(name=LETTERS,number=c(1:15),score=rep(3,4))
> ll
$name
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

$number
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

$score
[1] 3 3 3 3

> ll[2]  #用元素的下标来取值
$number
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

> ll["score"]  #用元素名来取值
$score
[1] 3 3 3 3

> ll$score  #用$对元素进行调用
[1] 3 3 3 3

> ll[c(T,T,F)]  #用逻辑值来取元素
$name
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

$number
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
#双层列表的取值
> lk <- list(ll,hign=rnorm(5,15,2))  #lk这个列表中包含ll这个列表,因此lk是一个双层列表
> lk
[[1]]
[[1]]$name
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

[[1]]$number
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

[[1]]$score
[1] 3 3 3 3


$hign
[1] 16.4 15.5 13.9 13.2 14.7

> lk[1]  #取第一层列表,此时会有三个元素,因为第一层列表本身包含三个元素
[[1]]
[[1]]$name
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

[[1]]$number
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

[[1]]$score
[1] 3 3 3 3

> class(lk[1])  #只取多层列表的一层,取出来后仍然是一个列表,但是此列表的长度是1,因为被取出来的整个列表是被当成一个整体来看待的
[1] "list"
> length(lk[1])
[1] 1

> lk[1][1]  #取出的是第一个列表整体
[[1]]
[[1]]$name
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

[[1]]$number
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

[[1]]$score
[1] 3 3 3 3

> lk[1][2]  #由于第一个列表被取出来后作为一个整体存在,长度为1,所以从中取出第二个元素
$<NA>
NULL

> class(lk[[1]])  #用 [[]] 来取值,现在取出的是一个列表,但此时的列表已经不是一个整体,而是一个有自己内部结构的列表,长度为自己本身的长度
[1] "list"
> length(lk[[1]])
[1] 3

> lk[[1]][1]  #此时可以方便地取出第一个列表的第一个列表
$name
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

> lk[[1]][2]
$number
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

  • 注意:用 [[]] 的方式进行取值时,每层最多使用两个 [] 的套用,对于一个超过两层的列表来说,想要取到底层的元素,可以使用多个 [[]] 联用的方式,比如 lh[[1]][[2]][1]

1. 删除列表中的某个元素

liast.name[-元素位置]

> aa <- list(1:4,2:6,5:9)

> aa
[[1]]
[1] 1 2 3 4

[[2]]
[1] 2 3 4 5 6

[[3]]
[1] 5 6 7 8 9

> bb <- aa[-2]  #删除列表中第二个元素
> bb
[[1]]
[1] 1 2 3 4

[[2]]
[1] 5 6 7 8 9

> cc <- aa[-c(1,3)]  #删除列表中第1和第三个元素
> cc
[[1]]
[1] 2 3 4 5 6
上一篇 下一篇

猜你喜欢

热点阅读