キーと値の2つの列のデータフレームがあり、ディクショナリ/ハッシュテーブルの各要素の各列のそれぞれの行を使用してディクショナリを作成したいと思います。
私が理解している限り、R辞書/ハッシュテーブルを使用する典型的な方法は、これと同様のことを行うことです。
labels.dic <- c("Id of the item and some other description" = "id")
これは完全に正常に機能しますが、データフレームの値(例ではlblsという名前)を使用して実行しようとすると、機能しません。なぜこれが起こるのですか?
labels.dic <- c(lbls[1,1]=lbls[1,2])
Error: unexpected '=' in "c(lbls[1,1] ="
あなたはいくつかの誤った情報を得ているように私には思えます。ハッシュテーブルを作成するためのその構文のアイデアをどこで得られるのかさえわかりません。
いずれにせよ、ハッシュテーブルのような機能の場合は、environment
の使用を検討することをお勧めします。これらはハッシュテーブルで内部的に機能するため(私が正しく覚えている場合)、やりたいことをすべて実行してください。
これは次のように使用します。
someenv<-new.env()
someenv[["key"]]<-value
data.frame
を考えると、次のようなものがいっぱいになります。
for(i in seq(nrow(lbls)))
{
someenv[[ lbls[i,1] ]]<- lbls[i,2]
}
(注:これには、最初の列が要素ではなく実際の文字列である必要があります!!)
その後、someenv[["nameofinterest"]]
を使用して、名前付きの値に簡単にアクセスできます。
PythonまたはPerlで見たものと同様の別のオプションは、hash
パッケージです。 http://cran.r-projectを参照してください。 org/web/packages/hash /
キーが特に長い場合は、2つのハッシュテーブルを保存することをお勧めします。まず、digest
パッケージを使用してキーをハッシュし、ダイジェストからキーにマップする辞書(ハッシュテーブル)を格納します(キーからダイジェストへのマップはすでにdigest
パッケージによって行われています;-) )、次にダイジェストから保存したい値まで。これは私にとって非常にうまくいきます。
最も簡単な方法は、変数を作成した後にnames
を変更することです。したがって、次のような関数を定義できます。
cc <- function(name, value) {
ret <- c(value)
names(ret) <- name
ret
}
cc(c(letters[1:2], "a name"), c(LETTERS[1:2], "a value"))
# output like this
# a b a name
# "A" "B" "a value"