2017-10-26 5 views
4

Ich speichere wichtige Metadaten in R-Objekten als Attribute. Ich möchte meinen Workflow nach Julia migrieren und suche nach einer Möglichkeit, die Attribute zumindest zeitweise als etwas für Julia zugänglich zu machen. Dann kann ich darüber nachdenken, das RData Paket zu erweitern, um diese Datenstruktur mit den Attributen der tatsächlichen Objekte zu füllen.Was ist die beste Annäherung von Julia an die Attribute von R-Objekten?

Ich verstehe, dass das Kommentieren mit Dingen wie Etikett oder Einheit in DataFrame - ich denke, die wichtigste Verwendung für Objekt-Attribute - wird wahrscheinlich in der DataFrames-Paket einige Zeit implementiert werden (https://github.com/JuliaData/DataFrames.jl/issues/35). Aber ich frage nach einer allgemeineren Lösung, die nicht von diesem speziellen Anwendungsfall abhängt.


Für alle Interessierten, here is a related discussion in the RData package

+1

Ich habe versucht, ein Attribut an eine data.table anzuhängen, aber ich habe festgestellt, dass die Attribute gelöscht werden, nachdem die Tabelle durch einige dplyr-Verben gelegt wurde, also ist der beste Weg, Dinge zu speichern? Ich denke in Julia definierst du einfach deine eigene Struktur ist der Weg zu gehen. – xiaodai

+0

Eine "braindead" -Lösung wäre die Einführung eines globalen Dict namens 'metadata', das Symbole als Schlüssel verwendet. –

Antwort

4

In Julia ist es ideomatic Ihre eigene Typen zu definieren - Sie einfach Felder in der Art, die Attribute zu speichern machen würde. In R ist das Schöne daran, Dinge als Attribute zu speichern, dass sie nicht beeinflussen, wie der Typ versendet - z. Das Hinzufügen von Metadaten zu einem Vektor führt nicht dazu, dass er sich nicht wie ein Vektor verhält. In julia ist dieser Ansatz ein wenig komplizierter - Sie müssten die Schnittstelle AbstractVector für Ihren Typ https://docs.julialang.org/en/latest/manual/interfaces/#man-interface-array-1 definieren, damit er sich wie ein Vektor verhält.

Im Wesentlichen bedeutet dies, dass die Workflow-Lösungen ein wenig anders sind - z. Häufig werden die Attributmetadaten in R dazu verwendet, einem Objekt Metadaten zuzuordnen, wenn es von einer Funktion zurückgegeben wird. Eine einfache Möglichkeit, etwas Ähnliches in Julia zu tun ist, die Funktion eines Tupels zurückkehren zu lassen und das Ergebnis zu einem Tupel zuordnen:

function ex() 
    res = rand(5) 
    met = "uniformly distributed random numbers" 
    res, met 
end 

result, metadata = ex() 

Ich glaube nicht, gibt es Pläne, Attribute zu implementieren, wie in R.

+4

Lass uns * hoffen * es gibt keine solchen Pläne. Attribute sind die schlimmsten Hacks. –

Verwandte Themen