2011-01-24 80 views
8

我是R編程新手。在檢查了一些教程後,我拿起了我需要的大部分東西,但還是有一件東西丟失了:數據結構圖。R和Python中的'dict'一樣嗎?

大家知道R是否有字典嗎?我可以存儲(鍵,值)對嗎?

謝謝!

+1

您將Python術語與C++混淆了。 *`dict` *是存儲(鍵,值)對的數據結構。 *`map(somefn,someseq)`*是一個函數,它將``somefn` *應用於*`someseq` *中的每個元素。 – smci 2011-12-05 22:38:55

回答

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`函數 – 2011-01-24 23:42:29

3

還有就是hash包..

+0

散列包中提供的散列類包裝了散列環境,提供了更多的方法,但也增加了一些開銷。 – 2011-01-25 06:20:10

5

環境也是一個人選,而在很多情況下是最好的選擇。

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

R> e$a 
[1] 1 

列表的缺點是它是一個線性搜索。

+1

環境使用比線性搜索更好的東西嗎?根據您的經驗,在線性搜索性能變得麻煩之前,您需要多少成員? – 2011-01-25 10:59:57

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-