首先需要思考下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)
> y
1 2 3
4 5 6
然后实现映射:
> r = y[as.character(x)]
> r
1 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学习书告诉你这就是“字典”,很少有人想到用它解决问题,实际上它是很高效的。
网友评论