2011-01-24 10 views
8

私はRプログラミングの初心者です。いくつかのチュートリアルをチェックした後、私が必要としたほとんどのものを取り上げましたが、まだ欠けているものが1つあります。データ構造マップです。Rにはpythonや 'C++'のように 'dict'がありますか?

Rにdictがあるかどうか誰もが知っていますか?私は(キー、値)のペアを格納することができますか?

ありがとうございます!

+1

あなたはPython用語をC++と混同しています。 * 'dict' *は(キー、値)のペアを格納するデータ構造です。 * 'map(somefn、someseq)' *は 'someseq' *のすべての要素に' somefn' *を適用する関数です。 – smci

答えて

8

はい、それはlistと呼ばれます。

> x <- list(a=1, b="foo", c=c(1,1,2,3,5)) 
> x 
$a 
[1] 1 

$b 
[1] "foo" 

$c 
[1] 1 1 2 3 5 

Pythonでは、それは価値があるためdictと呼ばれます。

+2

'pairlist'関数もあります。 –

3

hashパッケージがあります。..

+0

ハッシュパッケージで提供されるハッシュクラスは、より多くのメソッドを提供するハッシュされた環境をラップしますが、オーバーヘッドにも少し追加します。 –

5

環境も候補者であり、多くの場合、最良の選択肢。

e<-new.env(hash=T) 
e$a<-1 
e$b<-2 

R> e$a 
[1] 1 

リストの欠点は、リニア検索であることです。

+1

環境はリニア検索より優れたものを使用していますか?リニア検索のパフォーマンスが面倒になる前に、メンバー数は何人ですか? –

+1

http://broadcast.oreilly.com/2010/03/lookup-performance-in-r.html は簡単な概要を示します。要するに、インデックス配列を参照しているのであれば行くことができますが、もしラベル化された環境で行っているのであれば良いでしょう。 1024より小さいものはありませんが、ラベル検索の方が環境が良いです。あなたが小さいルックアップテーブルを持っているならば、ベクトルはより良くなるでしょう。 –

2

配列/ベクトル要素に名前を付けることができるので、組み込みのマップ/辞書のプロパティの一部を取得できます。

x <- c(apple = 1, banana = 99, "oranges and lemons" = 33) 
x["apple"] 
x[c("bananas", "oranges and lemons")] 
x[x == 99] 

(自分の価値観のタイプが異なる場合は、ベクトルの代わりにlistを使用する必要があります。)

0

は、前述のように、ハッシュパッケージには、わずかなオーバーヘッドを追加しないで柔軟、直感的に提供しませんマップ/ハッシュ/ディクショナリにアクセスするためのメソッド。別の言語を使用するユーザーにとっては非常に簡単です。

リストに少数の要素がある場合は、リストが最適なソリューションです。 (< 200程度)。

ごくわずかなオーバーヘッドを許容できず、柔軟で直感的な方法を望まない場合は、環境を使用することをお勧めします。

ほとんどの状況でハッシュパッケージが最適です。

C-

関連する問題