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