R语言——列表

参考资料:学习R

1、创建列表

        列表有list函数创建,且能向c函数那样指定内容。我们只需要简单地用逗号分隔每个参数即可指定列表中的内容。列表中的元素变量的类型不限,可以是向量、矩阵,甚至是函数:

a_list<-list(
  c(1,1,2,5,14,42),
  month.abb,
  matrix(c(3,-8,1,-3),nrow=2),
  asin
)
print(a_list)

        与向量的命名类似,我们可以在构造列表时就给元素命名,也可以在构造之后使用names函数命名:

the_same_list<-list(
  catalan=c(1,1,2,5,14,42),
  months=month.abb,
  involutary=matrix(c(3,-8,1,-3),nrow=2),
  arcsin=asin
)
print(the_same_list)

        建议我们在给元素命名时最好使用有效的变量名(有意义的变量名)。

2、原子变量和递归变量

        由于列表具有把其他列表包含在内的能力,他被认为是递归变量。与之相对,向量、矩阵和数组则是原子变量。函数is.recursive和is.atomic可测试变量是哪种类型。

3、列表的维度和算术运算

        列表与向量一样,也是有长度的,其长度是列表顶层元素的数目。

        列表没有维度。因此把dim函数作用于列表上则返回NULL。

length(a_list)
dim(a_list)
nrow(a_list)
ncol(a_list)
NROW(a_list)
NCOL(a_list)

        与向量不同的是,算术运算对列表不起作用。由于每个元素的类型可以不同,将两个列表相加或相乘没有任何意义。

4、索引列表

        与向量类似,我们可以通过方括号[]、正或负下标数字、元素名称或逻辑值这四种方法访问列表中的元素:

l<-list(
  first=1,
  second=2,
  third=list(
    alpha=3.1,
    beta=3.2
  )
)
l[1:2]
l[-3]
l[c('first','second')]
l[c(TRUE,TRUE,FALSE)]

        有时候,我们需要访问的列表元素中的内容。有两个操作符能帮助我们做到这一点:可用双方括号[[]]传入正整数,它代表返回的索引下标,或指定该元素的名称字符串,如下:

        如果输入的是一个列表,is.list函数将返回TRUE,否则将返回FALSE。作为比较我们看下面两个索引操作符:

        对于列表的命名元素,我们也可以使用美元符号运算符$。这与向双方括号传入一个命名字符串的工作方式是一样的,且有两个好处:首先,许多IDE能自动补全名字;其次,R能接受部分匹配的元素名称(尽量不要用):

        我们还可以通过嵌套方括号或传入向量来方位嵌套元素:

        当尝试不存在的元素列表时,系统会根据我们所使用的索引类型,行为略有不同:

        当我们使用单方括号的索引,那么将返回只带一个NULL元素的列表。无论是以双方括号还是美元符号来访问元素的内容,如果名字错误,都会返回NULL。

        如果一错误的数字进行双方括号的索引,则会报错

5、向量和列表之间的转换

        向量可使用函数as.list来转换成列表。所创建的可见列表与向量中元素的值一一对应:

        如果列表中每个元素都是标量值,则也可以使用之前出现过的函数(as.numeric、as.character等)将其转换为向量。

        如果列表中包含非标量元素,这种方法将不起作用。对于这样的列表,可用unlist函数将其转换为何量(对于混合类型的列表, 有时技术上可行, 但没什么用)

6、组合列表

        c函数既能用于拼接向量,亦能用于拼接列表:

        如果我们用它来拼接列表和向量,向量在拼接之前讲被转换为列表(就像调用了as.list函数):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值