Odpowiedzi:
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.
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.
Wektor atomowy
Istnieją trzy odmiany wektorów atomowych, które prawdopodobnie napotkasz:
- „Numeryczny”
- "logiczny"
- "postać"
W przypadku wektorów atomowych należy pamiętać, że wszystkie zawarte w nich pierwiastki są tylko jednego typu.
Lista
Listy mogą mieć różne typy elementów w różnych komponentach. Składnik listy może być inną listą, wektorem atomowym (i innymi rzeczami).
Proszę również zapoznać się z tym linkiem.
lista zawiera wiele typów danych, takich jak znakowe, numeryczne, logiczne itp. ale wektor zawiera tylko podobny typ danych. na przykład:
scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)
dla listy:
mylist <- list(scores,student,sc_log)
# search for class of mylist vector
#check structure of mylist using str() function.
str(mylist)
[1] list of 3
[1] $:num [1:4] 20 30 40 50
[2] $:chr [1:4] "A""B""C""D"
[3] $:log [1:4] TRUE FALSE FALSE TRUE
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:
vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"
#which means all elements of vector containing single data type that is numeric only.
key
s w wektorach za pomocąnames
metody.