Antworten:
Technisch Listen sind Vektoren, obwohl nur sehr wenige würde diesen Begriff verwenden. "Liste" ist einer von mehreren Modi, wobei andere "logisch", "Zeichen", "numerisch", "Ganzzahl" sind. Was Sie Vektoren nennen, sind "Atomvektoren" im strengen R-Sprachgebrauch:
aaa <- vector("list", 3)
is.list(aaa) #TRUE
is.vector(aaa) #TRUE
Listen sind ein "rekursiver" Typ (eines Vektors), während Atomvektoren nicht:
is.recursive(aaa) # TRUE
is.atomic(aaa) # FALSE
Sie verarbeiten Datenobjekte mit unterschiedlichen Funktionen, je nachdem, ob sie rekursiv oder atomar sind oder dimensionale Attribute (Matrizen und Arrays) aufweisen. Ich bin mir jedoch nicht sicher, ob eine Diskussion der "Vor- und Nachteile" verschiedener Datenstrukturen eine ausreichend fokussierte Frage für SO ist. Zusätzlich zu den Aussagen von Tommy gibt es neben Listen, die eine beliebige Anzahl anderer Vektoren enthalten können, auch Datenrahmen, bei denen es sich um einen bestimmten Listentyp handelt, der ein Dimensionsattribut aufweist, das seine Struktur definiert. Im Gegensatz zu Matrizen und Arrays, die wirklich gefaltete atomare Objekte sind, können Datenrahmen unterschiedliche Typen enthalten, einschließlich Faktortypen.
Es gibt auch die Einschränkung, dass die is.vector
Funktion zurückgegeben wird, FALSE
wenn andere Attribute als Namen vorhanden sind. Siehe: Was ist Vektor?
Listen sind "rekursiv". Dies bedeutet, dass sie Werte unterschiedlichen Typs enthalten können, auch andere Listen:
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
In R werden Listen verwendet, um Datensätze darzustellen: Die data.frame
Klasse ist im Wesentlichen eine Liste, in der jedes Element eine Spalte eines bestimmten Typs ist.
Eine andere Verwendung ist die Darstellung eines Modells: Das Ergebnis von lm
gibt eine Liste zurück, die eine Reihe nützlicher Objekte enthält.
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)
Atomvektoren (nicht listähnlich, aber numerisch, logisch und zeichenartig) sind nützlich, da bekannt ist, dass alle Elemente denselben Typ haben. Dies macht die Manipulation sehr schnell.
Als jemand, der gerade in R eingestiegen ist, aber aus einem C / Java / Ruby / PHP / Python-Hintergrund stammt, denke ich folgendermaßen darüber nach.
A list
ist wirklich ein Array + eine Hashmap. Es ist ein assoziatives PHP-Array.
> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'
A vector
ist ein Array / eine Liste vom festen Typ. Stellen Sie sich das wie eine verknüpfte Liste vor - denn das Einfügen unterschiedlicher Elemente in eine verknüpfte Liste ist sowieso ein Anti-Muster. Es ist ein Vektor im gleichen Sinne, wie SIMD / MMX / Vektoreinheiten das Wort verwenden.
Diese und ähnliche einleitende Fragen werden unter http://www.burns-stat.com/pages/Tutor/hints_R_begin.html beantwortet
Es soll eine sanfte Einführung sein, die Sie so schnell wie möglich mit R zum Laufen bringt. Bis zu einem gewissen Grad gelingt es.
--- Bearbeiten: -
Ein Versuch, weiter zu erklären; zitiert aus der obigen Referenz.
Atomvektor
Es gibt drei Arten von Atomvektoren, denen Sie wahrscheinlich begegnen:
- "Numerisch"
- "logisch"
- "Charakter"
Bei Atomvektoren ist zu beachten, dass alle Elemente in ihnen nur von einem Typ sind.
Aufführen
Listen können verschiedene Arten von Elementen in verschiedenen Komponenten enthalten. Eine Komponente einer Liste darf eine andere Liste sein, ein Atomvektor (und andere Dinge).
Bitte beachten Sie auch diesen Link.
Liste enthalten mehrere Datentypen wie Zeichen, Zahlen, logische et. Der Vektor enthält jedoch nur ähnliche Datentypen. zum Beispiel:
scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)
für Liste:
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
Dies bedeutet, dass die Liste mehrere Datentypen wie numerisch, zeichenweise und logisch in mylist enthält. Im Vektor gibt es jedoch einen einzelnen Datentyp aller Elemente in diesem Vektor
zum Beispiel:
für Vektor:
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
Mit dernames
Methode können Sie s in Vektoren haben .