Jakie są główne różnice między typami danych wektorowych i listowymi w języku R? Jakie są zalety lub wady używania (lub nie) tych dwóch typów danych?
Byłbym wdzięczny za obejrzenie przykładów, które pokazują przypadki użycia typów danych.
Z technicznego punktu widzenia listy są wektorami, chociaż bardzo niewielu użyłoby tego terminu. „lista” jest jednym z kilku trybów, inne to „logiczny”, „znakowy”, „numeryczny”, „całkowity”. To, co nazywacie wektorami, to „wektory atomowe” w ścisłym języku R:
aaa <- vector("list", 3)
is.list(aaa) #TRUE
is.vector(aaa) #TRUE
Listy są typu „rekurencyjnego” (wektorowego), podczas gdy wektory atomowe nie są:
is.recursive(aaa) # TRUE
is.atomic(aaa) # FALSE
Przetwarzasz obiekty danych z różnymi funkcjami w zależności od tego, czy są one rekurencyjne, atomowe czy mają atrybuty wymiarowe (macierze i tablice). Jednak nie jestem pewien, czy dyskusja na temat „zalet i wad” różnych struktur danych jest wystarczająco ukierunkowaną kwestią dla SO. Aby dodać do tego, co powiedział Tommy, oprócz tego, że listy mogą zawierać dowolną liczbę innych wektorów, istnieje dostępność ramek danych, które są szczególnym typem listy, która ma atrybut wymiarowy, który określa jej strukturę. W przeciwieństwie do macierzy i tablic, które są naprawdę złożonymi obiektami atomowymi, ramki danych mogą zawierać różne typy, w tym typy czynników.
Istnieje również zastrzeżenie, że is.vector
funkcja zwróci, FALSE
gdy istnieją atrybuty inne niż nazwy. Zobacz: co to jest wektor?
Listy są „rekurencyjne”. Oznacza to, że mogą zawierać wartości różnych typów, nawet inne listy:
x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13))
x # print the list
x$values # Get one element
x[["ids"]] # Another way to get an element
x$sub$foo # Get sub elements
x[[c(3,2)]] # Another way (gets 13)
str(x) # A "summary" of the list's content
Listy są używane w języku R do reprezentowania zestawów danych: data.frame
klasa jest zasadniczo listą, w której każdy element jest kolumną określonego typu.
Innym zastosowaniem jest reprezentacja modelu: wynik z lm
zwraca listę zawierającą kilka przydatnych obiektów.
d <- data.frame(a=11:13, b=21:23)
is.list(d) # TRUE
str(d)
m <- lm(a ~ b, data=d)
is.list(m) # TRUE
str(m)
Wektory atomowe (inne niż listowe, ale numeryczne, logiczne i znakowe) są przydatne, ponieważ wiadomo, że wszystkie elementy mają ten sam typ. To sprawia, że manipulowanie nimi jest bardzo szybkie.
Jako ktoś, kto dopiero co wszedł do R, ale wywodzi się z C / Java / Ruby / PHP / Python, oto jak o tym myślę.
A list
to tak naprawdę tablica + hashmap. To tablica asocjacyjna PHP.
> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
A vector
to tablica / lista o ustalonym typie. Potraktuj to jak listę połączoną - ponieważ umieszczanie różnych elementów na liście połączonej jest i tak anty-wzorcem. Jest to wektor w tym samym sensie, w jakim jednostki SIMD / MMX / wektorowe używają tego słowa.
key
s w wektorach za pomocąnames
metody.Odpowiedzi na to i podobne pytania wstępne można znaleźć w witrynie http://www.burns-stat.com/pages/Tutor/hints_R_begin.html
Ma to być delikatne wprowadzenie, które pozwoli Ci jak najszybciej rozpocząć pracę z R. W pewnym stopniu się to udaje.
--- Edytować: --
Próba dalszego wyjaśnienia; cytowany z powyższego odniesienia.
Proszę również zapoznać się z tym linkiem.
źródło
lista zawiera wiele typów danych, takich jak znakowe, numeryczne, logiczne itp. ale wektor zawiera tylko podobny typ danych. na przykład:
dla listy:
co oznacza listę zawierającą wiele typów danych, takich jak numeryczne, znakowe i logiczne, ale w wektorze będzie jeden typ danych dla wszystkich elementów w tym wektorze
na przykład:
dla wektora:
źródło