2011-01-24 7 views
8

Jestem nowy w programowaniu R. Po zapoznaniu się z samouczkiem wybrałem większość rzeczy, których potrzebowałem, ale wciąż brakuje jednej rzeczy: mapy struktury danych.Czy R ma "dyktować" jak w python lub "map" jak w C++ do?

Czy wszyscy wiedzą, że R ma dyktować? W którym mogę przechowywać pary (klucz, wartość)?

Dzięki!

+1

Twoje terminy w języku Python są pomieszane z C++. * 'dict' * to struktura danych przechowująca pary (klucz, wartość). * 'map (somefn, someseq)' * to funkcja, która stosuje * 'somefn' * do każdego elementu w *' someseq' *. – smci

Odpowiedz

8

Tak jest i nazywa się 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 

W języku Python nazywa się dict, co warto.

+2

Istnieje również funkcja 'pairlist' –

3

Jest pakiet hash ..

+0

Klasa skrótu podana w hash pakietach opakowuje mieszane środowisko, dostarczając więcej metod, ale także dodając trochę do narzutu. –

5

środowiska są również kandydatem, aw wielu przypadkach najlepszym rozwiązaniem.

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

R> e$a 
[1] 1 

Wadą listy jest to, że jest to wyszukiwanie liniowe.

+1

Czy środowisko używa czegoś lepszego niż wyszukiwanie liniowe? I ilu członków potrzebujesz, zanim wydajność wyszukiwania liniowego stanie się kłopotliwa, w twoim doświadczeniu? –

+1

http://broadcast.oreilly.com/2010/03/lookup-performance-in-r.html daje szybki przegląd. W skrócie, jeśli patrzysz w górę przez tablice indeksów, to jest droga, ale jeśli idziesz przez etykietę, mieszane środowisko jest lepsze. Nie ma nic mniejszego niż 1024, ale nawet wtedy środowiska są lepsze do wyszukiwania etykiet. Jest prawdopodobne, że jeśli masz małą tabelę odnośników, wektor będzie lepszy. –

2

Ponieważ elementy tablicowe/wektorowe mogą być nazywane, uzyskuje się niektóre z właściwości wbudowanej mapy/słownika.

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

(Jeśli wartości są różnych typów, to trzeba użyć list zamiast wektora.)

0

Pakiet hash jak wyżej wymieniony sposób dodać trochę nad głową, ale nie zapewnia elastyczne, intuicyjne metody dostępu do mapy/hash/słownika. Dla użytkowników z innego języka powinno to być bardzo łatwe.

Lista jest najlepszym rozwiązaniem, jeśli lista zawiera niewielką liczbę elementów. (< 200 lub mniej).

Środowisko najlepiej używać, jeśli absolutnie nie możesz znieść niewielkiego obciążenia i nie chcesz elastycznych, intuicyjnych metod.

Pakiet mieszający jest najlepszy w większości sytuacji.

C-

Powiązane problemy