Ich möchte eine Struktur erstellen, die für jeden Datensatz eine Zeichenfolge, einen Index und einen numerischen Wert speichert. Ich möchte auf den numerischen Wert zugreifen können, indem ich die Datenstruktur entweder mit dem Index oder dem String abfrage. Außerdem ist die Datenstruktur klein (in der Größenordnung von 30 Datensätzen), aber sie muss viele Male (möglicherweise sogar eine Million Mal) aufgerufen und modifiziert werden. Normalerweise würde ich nur einen Datenrahmen verwenden, aber angesichts der Effizienzanforderungen, denken Sie, dass es einen besseren (schnelleren) Weg geben würde? Nach der Syntax zu urteilen, habe ich den Eindruck, dass auf my_struct
zugegriffen werden muss zweimal für jede Operation (lesen oder schreiben): vielleicht ist es keine große Sache, aber ich frage mich, ob Experte R Programmierer, wenn Effizienz eine Einschränkung ist, würde dies verwenden Code oder etwas anderes.Effiziente Datenstruktur zum Speichern einer Zeichenfolge, einer ganzen Zahl und einer reellen Zahl für jeden Datensatz
# define data structure
my_struct <- data.frame(index = c(3:14,24), variable = c("Pin", "Pout", "Tout", "D", "L", "mu", "R","K","c","omega","alpha","beta","gamma"), value = runif(13), stringsAsFactors = FALSE)
# examples of read/write statements
my_struct$value[my_struct$variable == "Pin"]
my_struct$value[my_struct$index %in% c(3:14)]
my_struct$value[my_struct$index %in% c(3,5)] <- rnorm(2)
Wahrscheinlich wollen Sie 'data.frame (..., stringsAsFactors = FALSE)' da, wenn Sie wirklich eine Zeichenfolge wollen. – Frank
Wie auch immer, data.table unterstützt eine effiziente Indizierung auf mehreren Indizes mit binärer Suche und netter Syntax. Siehe http://r-datatable.com Eine Sache jedoch zu beachten: Es unterstützt nicht das Einfügen oder Löschen von Zeilen/Datensätzen. – Frank
@Frank hab es geschafft, danke für den Tipp. Ich möchte definitiv eine echte Saite, also korrigiere ich meinen Code entsprechend. – DeltaIV