列表list

列表是R中一种能存放各种类型数据的对象,包括向量、数据框、函数等。创建列表可通过list()函数,可以为元素命名。访问列表元素使用双括号,按位置或名字进行。列表是R中重要的数据结构,常用于自定义函数的多值返回和复杂数据存储。
摘要由CSDN通过智能技术生成

列表

列表是将数据组织在一个一维集合中,从这个组织方式来看,它与c()函数是相似的。但是,列表并不是将具体的值组织起来,而是组织R对象,如列表、数据框、矩阵、函数、向量等等。

列表非常好用,因为列表可以存放任何类型的数据,都不会出错,这使其成为R中全能型的存储工具。我们可以使用列表来存储任何类型的数据。在R自定义函数中,如果想要返回多个值,需要对返回结果创建一个list,中文为列表。 

1-创建列表

创建并填充一个列表:

list函数创建列表的方式和c函数创建向量的方式相似,不同的元素用逗号隔开。

创建列表方法1:

> lst <- list(0.5, 0.841, 0.977)
> lst
[[1]]
[1] 0.5

[[2]]
[1] 0.841

[[3]]
[1] 0.977

我自己的理解:可以将列表和c()函数结合来理解列表。c()是用来创建向量的,c意味着combine,将相同的数据类型结合在一起,构成一个向量。列表呢,允许有不同的数据类型,也就是说,构成列表的元素,可以是向量,字符串,数据框,列表。。。,任何R对象都是可以的。c()函数的每个元素只能放字符串、数字等,并且要求c()中的所有元素数据类型必须是一样的,术语为数据同质。可以将c()中的每个元素想象成一个房间,只能放一个东西的房间;将list()中的每个元素可以想象成一个三居室或者别墅,可以放多个东西的大house。

列表的返回值,使用双括号用于提示,现在展示的是列表的第几个元素,在这个元素下面存放的具体数据是什么,上面的这个R代码例子中,列表的每个元素存放的是数字,该列表共有三个元素。

列表的这种双括号索引系统,是因为列表的元素可以是任意一种R对象,这个R对象可能是一个自己有索引系统的向量或者列表。

列表可以包含复杂对象,而不仅仅是基本数据值。

例如:

mods <- list( lm(x ~ y1), lm(x~y2), lm(x~y3))

列表可以存放R的任何对象

> lst <- list(0.5, 0.841, 0.977)
> lst
[[1]]
[1] 0.5

[[2]]
[1] 0.841

[[3]]
[1] 0.977

> lst <- list(3.14, "mod", c(1,4,3), mean)
> lst
[[1]]
[1] 3.14

[[2]]
[1] "mod"

[[3]]
[1] 1 4 3

[[4]]
function (x, ...) 
UseMethod("mean")
<bytecode: 0x00000281e1d69b20>
<environment: namespace:base>

 上面这个例子中,可以看到,这个列表,存放了四个元素,第一个元素是个数字,第二个元素存放了一个字符串,第三个元素中存放了一个向量,第四个元素中存放了函数。

创建列表方法2:

可以先创建一个空的列表,然后将列表相应元素赋值来构造列表。

> lst <- lst()
> lst[[1]]  <- 3.14
> lst[[2]] <- "Moe"
> lst[[3]] <- c(1,1,2,3)
> lst[[4]] <- mean
> lst
[[1]]
[1] 3.14

[[2]]
[1] "Moe"

[[3]]
[1] 1 1 2 3

[[4]]
function (x, ...) 
UseMethod("mean")
<bytecode: 0x00000281e1d69b20>
<environment: namespace:base>

注意:访问列表的元素,一定是列表名+双括号,可以想象成是拿到钥匙,进入这个大house,要往这个大house中存放东西。

列表元素可以明明,list函数允许为每个元素提供名称,c()函数中每个元素也可以提供名称。

> lst <- list(mid=0.5, right=0.84, far.right = 0.977)
> lst
$mid
[1] 0.5

$right
[1] 0.84

$far.right
[1] 0.977

 关于列表的记忆方法,在《R语言入门与实践》4.4节美元符号与双中括号中介绍到,“将列表对象想象成一列火车是十分有用的。使用单中括号相当于选择某节车厢(车头+车厢:还是一列火车,即还是一个列表,从数学集合概念角度理解,可以理解成单中括号得到的是 原始列表的子集,即仍是一个列表),而使用双中括号则相当于选择某节车厢里的的内容。(不带火车头,是里面存放的内容)”

2-访问列表

根据位置访问列表元素

lst[[n]] #访问列表的第n个元素的内容,返回的是列表第n个元素的内容
lst[n] #返回一个元素的列表,即是lst原始列表的子集

lst[c(1,4,5)] #返回三个元素的列表,即是lst原始列表的子集


#若name是列表某个元素的名字,可以通过美元号和双中括号访问
lst$name
lst[["name"]]

参考:

<R语言经典实例>(原书第2版)(2020年5月出版--机械工业出版社)(这本书不错,简短易懂。)

《R语言入门与实践》(2016年6月出版--人民邮电出版社)(这本书不错,对于初学/理解R对象(向量、数据框、矩阵、列表)非常有帮助!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值