使用命名列表作为索引来对字符串向量进行子集化

时间:2013-02-05 14:37:33

标签: r vector mapping

我有一长串字符串,需要根据预先指定的映射转换为数字。我已将此映射放入命名列表中,因此可以获得单个元素,但我无法弄清楚如何将其应用于向量

例如:

> X <- c("a", "b", "b", "a", "c")
> M <- list(a = 11, b = 22, c = 33)
> M[["a"]]
[1] 11
> M[[X]]
Error in M[[X]] : recursive indexing failed at level 2
> sapply(X, M)
Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'M' of mode 'function' was not found

这里的正确方法是什么?

2 个答案:

答案 0 :(得分:9)

另一种类似的方法:

R> unlist(M[X])
 a  b  b  a  c 
11 22 22 11 33 

答案 1 :(得分:5)

您只需在代码中进行一些小的更改:

  • 使用命名向量而不是命名列表(这是可选的 - 命名列表也可以使用)
  • 但更重要的是,使用单括号[而不是双[[。单括号匹配向量,而双括号匹配单个元素。

像这样:

M <- c(a = 11, b = 22, c = 33)
X <- c("a", "b", "b", "a", "c")

unname(M[X])
[1] 11 22 22 11 33