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 に答える