开发者学堂课程【R 语言编程基础:R 的 list 列表详解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/564/detail/7718
R 的 list 列表详解
list 列表详解
1、list 列表数据类型在R中有非常重要的地位,很多 R 中的函数返回值也是 list 列表的形式。列表的成分和向量的元素,它们是不同的,它们不一定是同一种类型,或者它们的模式和长度可以是不一样的,列表的成分通常是有一个编号,并且它有一个名称的属性。
2、举例说明列表其他的使用方法,打开 R,创建列表,第一个成分是学生的 ID,赋值为1234,学生的分数,学习成绩是向量,还有各科的成绩,这个列表由三个成分组成,第一个是名称为6个 ID 的数值,第二个是字符串,第三个是数值向量
mylist <- list (stud. id=1234,
+
stud. name= "Tom"
,
+
stud.marks=c(1
2
,3,14,25,19) )
输入 mylist 查看列表结构的样子。涵盖了三个主要的对象成分。
$stud. id
[1] 1234
$stud. name
[1] "Tom"
$stud . marks
[1 ]12
3 14
25 19
(1)可以通过双括号的形式访问列表的成分,也就是索引的方式得到列表的形式,比如想要知道刚刚建的列表的第一个元素,它的一个值,通过双括号加上值获取第一个成分的数据,获得了学生的 ID1234。
Mylist
[[1]]
[1] 1234
(2)也可以获得三个成分,是学生考试分数的向量。
Mylist
[[3]]
[1]
12
3 14
25 19
(3)使用双括号得到列表的元素。如果使用单括号得到的是1234,但是展现形式和双括号不一样,第一个方式使用双括号是提到列表的第一个组建的值,也就是学生的 ID1234,用单括号取1时,实际上是获取列表 Mylist 获取的它第一个成分构成的子列表,这个自列表就包括了列表的名称,列表名称下面的数值。也可以通过函数 mode 看一下,mode(mylist[[1]]),双括号得到的是学生的 ID,结构形式是数值型,‘’numeric‘’,单括号实际上是原来列表的子列表,mode(mylist[1]),这个形式就是 list 形式,‘’list‘’。
(4)列表还可以通过$符号,后面加成分名称,可以取到成分下面的数值。
mylist
$
stud. Id
[1] 1234
(5)列表成分的名称实际上也是列表的属性,它可以向向量的元素名操作,比如取到各个成分的名称,取到 ID,name
,
marks
。
names
(
mylist
)
[1]
‘’
stud. Id‘’
‘’
stud.name‘’
‘’
stud.marks‘’
(6)还可以对列表的成分名称进行更改,这样操作的结果把原来的’stud. Id,stud.name,stud.marks 改成 id,name
,
marks
。
names (mylist) <- c("id", "name ","marks")
mylist
$id
[1 ] 1234
$name
[1] "Tom"
$marks
[1] 12
3
14
25
19
可以看到名称已经做了改变。
3、经常使用列表会碰到一种情况,就是对列表进行扩充,增加新的元素,如何增加新的元素添加列表,比如对 mylist 进行扩展,用$符号增加学生父母的名字,父亲的名字和母亲的名字。
> mylist$parents <- c ("Mna", "Jutice")
> mylist
$id
[1] 1234
$name
[1] "Tom'
$marks
[1] 12
3
14
25
19
$parents
[1] "Mna " "Jutice "
这样就多了一个 parents 的成分,并且给这个成分赋值。
4、提取列表的长度,在便利列表各个成分时会写一个循环语句,在做循环语句之前,就要得到它的长度决定循环的次数。
length
(
mylist
)
[1]
4
5、除了对列表进行扩充外,可能还需要对列表进行删减,删掉其中的某一个成分,比如删除其中第四个成分,mylist列表第四个成分就是 parents,使用命令后,mylist 会变成三个成分,第四个成分被删除掉。
mylist<- mylist[-4]
mylist
$id
[1] 1234
$name
[1] "Tom"
$marks
[1] 12
3
14
25
19
6、在对列表的实际操作中,有两个列表,并且需要把两个列表拼接到一起,可以直接使用 c 函数进行实现,重新创建一个列表。
> other <- list(age=19, sex="male")
> other
$age
[1] 19
$sex
[1] "male"
把新创建的列表和 mylist 列表进行合并。可以看到 mylist,和 other 两个列表合并在一起。
> lst <- c (mylist, other)
> lst
$id
[1] 1234
$name
[1] "Tom"
$marks
[1] 12
3
14
25
19
$age
[1] 19
$sex
[1]
"male"
7、在使用 R 的过程中通常会遇到在创建一个列表之后,很有可能在后续的处理中希望把列表的数据类型转化成向量的元素,当想去便利列表中所有元素时,如果使用列表的模式,循环就会很复杂,如果转换成向量的形式,比如100个元素,只需要循环1到100即可,而如果是列表,首先需要考虑第一个成分有几个元素,循环一遍,遇到第二个成分时,又需要判断第二个成分有多少个元素,再进行循环便利,所以这样会便利的访问会变的复杂,因此这时会用到unlist 函数,unlist 就是把列表中所有的元素转换成向量的函数,用 unlist 函数对1st 进行转换,
> unlist (1st)
Id
name marks1 marks2 marks3 marks4 marks5
age
sex
"1234 "
"Tom"
"12"
"3"
"14"
"25"
"19"
"19" "male"
相当于把 list 原来列表中所有的元素都转换成向量,只不过这个向量和前面的向量不一样的地方是,这个向量每一个元素都有一个名称,第一个向量元素名称是 id,值是1234,转化过程中把原来的数值强行转化成字符串的形式,是因为向量只能存放一种数据类型。