2017-10-18 4 views
2

Ich kann keine leeren IndexedTables definieren, z.Wie definiert man leere IndexedTables in Julia?

using IndexedTables, IndexedTables.Table 
t = Table(Columns(a=Int64[],b=String[]),Int64[]) 
t[1,"a"] = 1 
t[1,"b"] = 2 
t[1,"c"] = t[1,"a"] + t[1,"b"] 
BoundsError: attempt to access 0-element Array{Int64,1} at index [0] 

Ich bin mir bewusst, dass der IndexedTable mit bereits den Daten der Schaffung effizienter ist, dass ein leeren erstellen und dann Werte einfügen, aber manchmal sind Sie auf diesem Weg zu gehen, verpflichtet.

Ist das ein Fehler? Wenn ja, gibt es eine mögliche Lösung?

(I posted bereits dieses Thema auf den Julia forum, aber bisher hatte ich keine Antworten gibt)

Antwort

2

Dies ist wahrscheinlich ein Fehler in IndexedTables.

Das Einfügen in eine IndexedTable erfordert eine Neuindizierung für den Zugriff auf die Daten. Reindexing erfolgt mit flush!.

Aber flush!(t) schlägt in dem Beispiel in der Frage mit dem leeren t fehl.

julia> function IndexedTables._merge!(dst::IndexedTable, src::IndexedTable, f) 
    if length(dst.index)==0 || isless(dst.index[end], src.index[1]) 
     append!(dst.index, src.index) 
     append!(dst.data, src.data) 
    else 
     # merge to a new copy 
     new = _merge(dst, src, f) 
     ln = length(new) 
     # resize and copy data into dst 
     resize!(dst.index, ln) 
     copy!(dst.index, new.index) 
     resize!(dst.data, ln) 
     copy!(dst.data, new.data) 
    end 
    return dst 
end 

julia> t[1,"c"] = t[1,"a"] + t[1,"b"] 
3 

Die Veränderung der ersten if die Zugabe der length(...) Prüfung ist:

flush! Fixing der _merge! Anrufe kann durchgeführt werden.

Natürlich sollte eine Pull-Anfrage/Problem mit IndexedTables.jl geöffnet werden. Antonello, wirst du das tun? (oder soll ich)

+1

Danke Dan Getz, ich ließ Sie die Pull-Anfrage, als derjenige, der die Wurzel des Problems gefunden :-) – Antonello

+1

OK. Eröffnet die PR –

+0

Nur um festzustellen, [Pr] (https://github.com/JuliaComputing/IndexedTables.jl/pull/88) wurde zusammengeführt. – Antonello

Verwandte Themen