Ich möchte das Äquivalent eines Python-Diktats in R machen. Grundsätzlich habe ich in Python:
visited = {}
if atom_count not in visited:
Do stuff
visited[atom_count] = 1
Die Idee ist, wenn ich diesen spezifischen atom_count gesehen habe, habe ich [atom_count] = 1 besucht. Wenn ich diesen atom_count also wieder sehe, mache ich nicht "Do Stuff". Atom_Count ist eine Ganzzahl.
Vielen Dank!
python
r
dictionary
user1357015
quelle
quelle
hash
mit seinen fast Python-ähnlichen Zugriffsfunktionen an.Antworten:
Das, was einem Python-Diktat in R am nächsten kommt, ist einfach eine Liste. Wie die meisten R-Datentypen können Listen ein Namensattribut haben, mit dem sich Listen wie eine Reihe von Name-Wert-Paaren verhalten können:
> l <- list(a = 1,b = "foo",c = 1:5) > l $a [1] 1 $b [1] "foo" $c [1] 1 2 3 4 5 > l[['c']] [1] 1 2 3 4 5 > l[['b']] [1] "foo"
Nun zum üblichen Haftungsausschluss: Sie sind nicht genau gleich; Es wird Unterschiede geben. Sie werden also zu Enttäuschungen einladen, wenn Sie versuchen, Listen buchstäblich so zu verwenden, wie Sie ein Diktat in Python verwenden könnten.
quelle
l$names(l)[1]
versagt offensichtlich. Ich war auch nicht in der Lage,l[which()]
zur Arbeit zu kommenfor
Schleife, die in so ziemlich jeder Sprache eine Option ist, gibt es einelapply
. Es gibt auch verwandte Dinge mit unterschiedlicher Syntax, wieMap
und ein ganzes Paket, purrr für viele funktionale Programmieraufgaben.l[[names(l)[1]]
sollte funktionieren. Wie auch immer, Sie können einfach so iterieren:l[[1]]
ohne die Namen zu verwenden. Beachten Sie, dass einfache Klammern[]
eine Liste zurückgeben, während doppelte Klammern[[]]
das Objekt in der Liste zurückgeben.names(list) <- vector_of names
untergeordneter Zuweisung festlegennames(list)[1] <- "foo"
. Siehe auchsetNames()
.Ich glaube, dass die Verwendung einer Hash-Tabelle (Erstellen einer neuen Umgebung) die Lösung für Ihr Problem sein kann. Ich würde schreiben, wie das geht, aber ich habe es gestern bei talkstats.com getan.
Wenn Ihr Wörterbuch groß ist und nur zwei Spalten enthält, ist dies möglicherweise der richtige Weg. Hier ist der Link zum Talkstats-Thread mit Beispiel-R-Code:
HASH TABLE LINK
quelle
data.table
Die benannten Vektor-Lookups von Note und R haben sich seitdem drastisch in der Geschwindigkeit verbessert.Wenn Sie wie in Ihrem Fall nur möchten, dass Ihr "Wörterbuch" Werte desselben Typs speichert, können Sie einfach einen Vektor verwenden und jedes Element benennen.
> l <- c(a = 1, b = 7, f = 2) > l a b f 1 7 2
Wenn Sie auf die "Schlüssel" zugreifen möchten, verwenden Sie
names
.> names(l) [1] "a" "b" "f"
quelle