手记

【r<-探索】R里面有没有Python中的字典概念?

首先需要思考下Python中的字典是个什么东西:它是一个键值对序列

R里面到底有没有类似的东西呢?肯定是有的,虽然没有字典的概念,但R里面的的确确存在字典的实现。

这个要介绍的东西就是命名向量。当我们创建一个简单的向量时,它是没有名字的,如下:

> c(1:3)
[1] 1 2 3

如果用names()给它的名字属性赋值,那就是字典了!

字典有一个非常重要的作用,就是实现映射

例如,现在你要解决这样一个问题:将下面的1改成4、2改成5、3改成6。

> x = rep(1:3, times = c(3,4,5))
> x
 [1] 1 1 1 2 2 2 2 3 3 3 3 3

当然你可以重新用rep()创建一个结果,但那就没什么意思了。

正确的做法是先构建一个“字典”:

> y = c("1"=4, "2"=5, "3"=6)
> y1 2 3 4 5 6

然后实现映射:

> r = y[as.character(x)]
> r1 1 1 2 2 2 2 3 3 3 3 3 4 4 4 5 5 5 5 6 6 6 6 6

如果觉得名字碍眼,再去掉就可以了:

> names(r) = NULL> r
 [1] 4 4 4 5 5 5 5 6 6 6 6 6

虽然只是一个小例子,但因为没有哪一个R学习书告诉你这就是“字典”,很少有人想到用它解决问题,实际上它是很高效的。



作者:王诗翔
链接:https://www.jianshu.com/p/7f51484dffdb


0人推荐
随时随地看视频
慕课网APP