R语言(3)——list


1 list 本质上也是一种向量

1.1普通的向量是原子型(atomic)向量,就是说,向量的元素已经是最小的不可再分的了。

      而list属于“递归型”(recursive)向量。

1.2 list可以包含不同的数据类型。(显然普通的向量是不行的)

2 创建list

2.1

#method 1
> j<-list(name="Joe",salary=10000,union=T)
> j
$name
[1] "Joe"

$salary
[1] 10000

$union
[1] TRUE
#method 2: without  column name
> j<-list("Joe",10000,T)
> j
[[1]]
[1] "Joe"

[[2]]
[1] 10000

[[3]]
[1] TRUE

# method 3: create it like a special vector
> z<-vector(mode="list")
> z[['v1']]<-3
> z
$v1
[1] 3

2.2 在引用的时候,标签的名字可以简写,只要写出前几个字母,且不引起歧义,R都能够识别。

2.3 在创建时,建议为每列命名,这样能使程序更加清楚明了,不易出错。


3 列表索引与增删改查

列表索引虽然和向量相似,但是还是有很大的不同,因此要非常注意。

3.1 索引方法

#method 1
> j$salary
[1] 1e+04 1e+06
> j$salary[1]
[1] 10000

#method 2
> j[[2]]
[1] 1e+04 1e+06
> j[[2]][1]
[1] 10000

#method 3
> j[["salary"]]
[1] 1e+04 1e+06
> j[["salary"]][1]
[1] 10000

#method 4
> j[1]
$name
[1] "Joe" "fan"

> class(j[1])
[1] "list"

> j[1][1]
$name
[1] "Joe" "fan"

3.3.1 注意:前三种方法,取得的值都是各自数据类型的向量,我们取出了salary这一列,如果我们用class查看,其结果是numeric;而最后一种方法,取得的是list!

3.3.2 一定要区分[[ ]]和[ ] 这两种操作符。前者(即[[ ]]),取出的是一个普通的向量,其数据类型是向量中元素的数据类型;而后者(即[]),取出的依然是list,千万不要搞混

3.3.3 总结一下,在R中,对提取list中的指有共有两大类方法,其区别就在于取出的值是list还是其本身的类型

大类一:取出的值是其数据类型本身

>j$salary
>j[["salary"]]
>j[[1]]

大类二:取出的是列表

>j["salary"]
>j[1]

3.2 增加

列表和向量不同,我们可以向列表中添加一个值。

#method 1
> z<-list(a="abc",b=12)
> z
$a
[1] "abc"

$b
[1] 12

> z$c<-c("sailing","car") #添加
> z
$a
[1] "abc"

$b
[1] 12

$c
[1] "sailing" "car"    

#method 2

> z[[4]]<-c(29,28) #注意,要用双中括号
> z
$a
[1] "abc"

$b
[1] 12

$c
[1] "sailing" "car"    

[[4]]
[1] 29 28

3.3 删除



> z
$a
[1] "abc"

$b
[1] 12

$c
[1] "sailing" "car"    

[[4]]
[1] 29 28

#method 1
> z[4]<-NULL #删除,单中括号和双中括号都可以。
> z
$a
[1] "abc"

$b
[1] 12

$c
[1] "sailing" "car"    

> z
$a
[1] "abc"

$b
[1] 12

$c
[1] "sailing" "car"    

<pre name="code" class="plain">#method 2 
> z$a<-NULL #删除> z$b[1] 12$c[1] "sailing" "car"
 

3.3.1 显然,这两种方法没有本质区别,都是将找到的列赋予NULL;区别并不在于如何删除,而是索引方法不同。

3.3.2 当为一个列设定了NULL之后,R会自动的索引序号,被删除列后面的索引均会自动减去1。


3.4 将两个list拼接起来

> z<-c(list('abc',2,T),list(4))
> z
[[1]]
[1] "abc"

[[2]]
[1] 2

[[3]]
[1] TRUE

[[4]]
[1] 4


4 常用操作

4.1 length() 查看list的列数

4.2 unlist() 将list转化为向量。如果list中存在着不同的存储模式,R将会自动的将不同的存储模式转化为一种,R会选择能够最大的保持他们共同特征的类型。

4.3 unname(j)  或者是 names(j)<-NULL 都可以将list j的列名去除

4.4 names(j) 查看list j的列名

4.5 lapply(list,function)   (list apply) 同矩阵的apply类似,对list中的每个组建应用function函数。


5 递归性列表

列表的递归性是指:列表中的组建依旧可以是列表。


> a<-list("a","afd","dfa")
> b<-list(1,2,3,4,5)
> c<-list(a,b)
> c
[[1]]
[[1]][[1]]
[1] "a"

[[1]][[2]]
[1] "afd"

[[1]][[3]]
[1] "dfa"


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

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

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

[[2]][[4]]
[1] 4

[[2]][[5]]
[1] 5



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值