Ich habe eine triviale Frage: Ich konnte keine Wörterbuchdatenstruktur in R finden, also habe ich stattdessen Liste verwendet (wie "Wort" -> Nummer). Im Moment habe ich also Probleme, wie ich die Liste der Schlüssel erhalte. Weiß jemand Bescheid?
89
environment
Typ wird dafür in R verwendet, ist aber weniger verbreitet / weniger bekannt.Sie benötigen nicht einmal Listen, wenn Ihre "Zahlen" -Werte alle den gleichen Modus haben. Wenn ich das Beispiel von Dirk Eddelbuettel nehme:
Listen sind nur erforderlich, wenn Ihre Werte entweder im gemischten Modus (z. B. Zeichen und Zahlen) oder in Vektoren vorliegen.
Sowohl für Listen als auch für Vektoren kann ein einzelnes Element nach Namen unterteilt werden:
Oder für eine Liste:
quelle
c(12,22,33)
dieser wörterbuchartigen R-Struktur foo erhalten?unlist(lapply(FUN=function(a){foo[[a]]},X = 1:length(foo)))
ist sehr unpraktisch. Irgendeine fertige Funktion dafür? Verschob die Frage hierherUm die Antwort von Calimo ein wenig zu erweitern, präsentiere ich einige weitere Dinge, die Sie beim Erstellen dieser Quasi-Wörterbücher in R nützlich finden können:
a) wie man alle WERTE des Wörterbuchs zurückgibt:
b) Überprüfen Sie, ob das Wörterbuch einen Schlüssel enthält:
c) Hinzufügen eines neuen Schlüssels und eines Wertpaars zum Wörterbuch:
Ergebnisse:
d) Wie kann die Anforderung von REAL DICTIONARY erfüllt werden - dass Schlüssel NICHT wiederholt werden können (EINZIGARTIGE SCHLÜSSEL)? Sie müssen b) und c) kombinieren und eine Funktion erstellen, die überprüft, ob ein solcher Schlüssel vorhanden ist, und das tun, was Sie möchten: z. B. Einfügen nicht zulassen, Wert aktualisieren, wenn der neue vom alten abweicht, oder Schlüssel irgendwie neu erstellen (z fügt eine Nummer hinzu, damit es eindeutig ist)
e) wie man ein Paar nach Schlüssel aus dem Wörterbuch löscht:
quelle
c(foo, tic2=NULL)
. Irgendeine Arbeit herum?Der Grund für die Verwendung von Wörterbüchern ist in erster Linie die Leistung. Obwohl es richtig ist, dass Sie benannte Vektoren und Listen für die Aufgabe verwenden können, besteht das Problem darin, dass sie mit mehr Daten ziemlich langsam und speicherhungrig werden.
Was viele Menschen jedoch nicht wissen, ist, dass R tatsächlich eine eingebaute Wörterbuchdatenstruktur hat: Umgebungen mit der Option
hash = TRUE
Im folgenden Beispiel erfahren Sie, wie es funktioniert:
Bearbeiten : Auf der Grundlage dieser Antwort habe ich einen Blog-Beitrag mit etwas mehr Kontext geschrieben: http://blog.ephorie.de/hash-me-if-you-can
quelle
Der Paket- Hash ist jetzt verfügbar: https://cran.r-project.org/web/packages/hash/hash.pdf
Beispiele
quelle
Kürzere Variante von Dirks Antwort:
quelle
Ich möchte nur kommentieren, dass Sie eine Menge Kilometer sammeln können,
table
wenn Sie versuchen, auch ein Wörterbuch zu "fälschen", zetc.
quelle
as.numeric()
es notwendig ist. Die Tabelle ist bereits numerisch. Sie können das gleiche Ergebnis mitnames(t[order(t)])