3

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

例如:

> 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

这里的正确方法是什么?

4

2 回答 2

9

另一种类似的方法:

R> unlist(M[X])
 a  b  b  a  c 
11 22 22 11 33 
于 2013-02-05T14:40:58.027 回答
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
于 2013-02-05T14:40:33.270 回答