wake-up-neo.com

Was sind die Unterschiede zwischen Vektor- und Listendatentypen in R?

Was sind die Hauptunterschiede zwischen Vektor- und Listendatentypen in R? Was sind die Vor- oder Nachteile der Verwendung dieser beiden Datentypen (oder nicht)?

Ich würde mich über Beispiele freuen, die die Anwendungsfälle der Datentypen veranschaulichen.

97
DCR

Technisch sind Listen sind Vektoren, obwohl nur sehr wenige diesen Begriff verwenden würden. "Liste" ist einer von mehreren Modi, wobei andere "logisch", "Zeichen", "numerisch", "Ganzzahl" sind. Was Sie Vektoren nennen, ist "atomar" in strenger R-Sprache:

 aaa <- vector("list", 3)
 is.list(aaa)   #TRUE
 is.vector(aaa)  #TRUE

Listen sind "rekursiv", während atomare Vektoren nicht

is.recursive(aaa)  # TRUE
is.atomic(aaa)  # FALSE

Sie verarbeiten Datenobjekte mit unterschiedlichen Funktionen, je nachdem, ob sie rekursiv, atomar oder dimensional sind (Matrizen und Arrays). Ich bin jedoch nicht sicher, dass eine Diskussion über die "Vor- und Nachteile" verschiedener Datenstrukturen eine ausreichend fokussierte Frage für SO ist. Zu dem, was Tommy sagte, kommt hinzu, dass neben den Listen, die in der Lage sind, eine beliebige Anzahl von anderen Vektoren aufzunehmen, Datenframes verfügbar sind, bei denen es sich um einen bestimmten Listentyp handelt, der ein Dimensionsattribut aufweist, das seine Struktur definiert. Im Gegensatz zu Matrizen und Arrays, bei denen es sich wirklich um gefaltete atomare Objekte handelt, können Dataframes unterschiedliche Typen enthalten, einschließlich Faktortypen.

61
42-

Listen sind "rekursiv". Das bedeutet, dass sie Werte verschiedener Typen 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

Listen werden in R zur Darstellung von Datensätzen verwendet: Die Klasse data.frame ist im Wesentlichen eine Liste, in der jedes Element eine Spalte eines bestimmten Typs ist.

Eine andere Verwendung ist die Repräsentation 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)

Atomare Vektoren (nicht listeähnlich, aber numerisch, logisch und Zeichen) sind nützlich, da bekannt ist, dass alle Elemente denselben Typ haben. Dies macht das Manipulieren sehr schnell.

40
Tommy

Als jemand, der gerade in R gekommen ist, aber aus einem C/Java/Ruby/PHP/Python-Hintergrund stammt, denke ich hier.

Eine list ist wirklich ein Array + eine Hashmap. Es ist ein assoziatives Array PHP.

> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'

Eine vector ist ein Array/Liste vom festen Typ. Stellen Sie sich das wie eine verknüpfte Liste vor - denn ungleichartige Elemente in eine verknüpfte Liste zu stellen, ist sowieso ein Anti-Muster. Es ist ein Vektor in dem Sinne, dass SIMD/MMX/Vektoreinheiten das Word verwenden.

15
Visser

Diese und ähnliche Einführungsfragen werden in 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 in Betrieb setzt. Bis zu einem gewissen Grad gelingt es.

7
Patrick Burns

Vektoren (eindimensionales Array): kann numerische, zeichen- oder logische Werte enthalten. Die Elemente in einem Vektor haben alle denselben Datentyp.

Eine Liste in R ähnelt Ihrer To-Do-Liste bei der Arbeit oder in der Schule: Die verschiedenen Elemente in dieser Liste unterscheiden sich höchstwahrscheinlich in Länge, Merkmal, Art der zu erledigenden Aktivität, ...

Mit einem Liste in R können Sie eine Vielzahl von Objekten unter einem Namen (d. H. Dem Namen der Liste) geordnet zusammenstellen. Diese Objekte können Matrizen, Vektoren, Datenrahmen, sogar andere Listen usw. sein. Es ist nicht einmal erforderlich, dass diese Objekte in irgendeiner Weise miteinander in Beziehung stehen.

Man könnte sagen, dass eine Liste eine Art Super-Datentyp ist: Sie können praktisch jede Information darin speichern!

Um eine Liste zu erstellen, verwenden Sie die Funktion list (): my_list <- list (comp1, comp2 ...)

Die Argumente für die Listenfunktion sind die Listenkomponenten. Denken Sie daran, dass diese Komponenten Matrizen, Vektoren, andere Listen, ... sein können.

Zusammenfassend ist der Hauptunterschied zwischen Liste und Vektor, dass Liste in R es Ihnen ermöglicht, eine Vielzahl von Objekten unter einem Namen (d. H. Dem Namen der Liste) in einem bestellte weg. Bei diesen Objekten kann es sich um Matrizen, Vektoren, Datenrahmen, sogar andere Listen usw. handeln. Es ist nicht einmal erforderlich, dass diese Objekte in irgendeiner Weise miteinander in Beziehung stehen, ... während die Elemente in einem Vektor alle Elemente haben der gleiche Datentyp.

2
Naren

liste enthalten mehrere Datentypen wie Zeichen, numerische, logische et. Der Vektor enthält jedoch nur einen ähnlichen Datentyp . 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 eine Liste mit mehreren Datentypen wie numerisch, Zeichen und logisch in mylist. Aber im Vektor gibt es einen einzigen 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.
0
Devyani Balyan