10

最近R語学の勉強を始めました。私は Java/Python のバックグラウンドを持っています。私が驚いたことの 1 つは、orのようなものではなく、 associative arrayinRが呼び出されていることです。 ListMapDictionary

Map や Dictionary などの名前は、データ構造がリストよりも連想配列であるという考えをよりよく伝えていると思います。この背後にある背景/理由を教えてください。

4

2 に答える 2

18

S は、Java や Python よりも長い歴史を持っています。この用語は、最初の高級言語の 1 つである LisP に由来します。

さらに、名前付きアトミック ベクトルを使用して、一部の人々が連想配列と呼ぶものを作成できます。

 vec <- c(a=1,b=2,c=3)
 vec["b"]
 #b 
 #2 

ベクトルには、「再帰的」と「原子的」の 2 種類があります。リストは最初の並べ替えです。要素にキーが割り当てられている場合、どちらも「名前」で索引付けできます。ただし、R の「名前」という用語は、オブジェクト値を持つ環境に存在するシンボルを厳密に指します。を参照してください?as.name。R では、「名前」または「シンボル」は、コード内で引用されていない言語オブジェクトですが、文字値は、キーによってデータ オブジェクトから値を割り当てたり抽出したりするために使用されます。

于 2013-01-03T07:05:39.573 に答える
4

「地図」は世界のチャートです。地図上で物事を見つけるには、2 次元でスキャンする必要があります。これは O(n^2) です。「辞書」とは、単語をアルファベット順に並べた本です。辞書で単語を見つけるには、バイナリ検索を行う必要があります。これは O(log n) のパフォーマンスです。

したがって、私にとって、これらの言葉のどちらも、連想配列の構造やパフォーマンスを正確に描写していません...

数学的に言えば、連想配列は単に離散範囲の関数です。したがって、それらは単に関数と呼ばれるべきです。二重角かっこは、構文上の煩わしさです。できない理由:

z = list()
z("foo") = c(1,2,3)
print(z("foo")) # prints 1 2 3
print(z("bar")) # errors
  • Rはそうではないからです。
于 2013-01-03T08:54:55.187 に答える