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

Cor*_*one 3 mapping r vector

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

例如:

> 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
Run Code Online (Sandbox Code Playgroud)

这里的正确方法是什么?

jub*_*uba 9

另一种类似方法:

R> unlist(M[X])
 a  b  b  a  c 
11 22 22 11 33 
Run Code Online (Sandbox Code Playgroud)


And*_*rie 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
Run Code Online (Sandbox Code Playgroud)