JLD.jl
JLD.jl copied to clipboard
Cannot save Dict{Symbol}
trafficstars
When using DrWatson.jl's collect_results! with JLD as the desired output format, things break. Internally, it tries to store a Dict{Symbol,DataFrame} (see here; wsave is just a copy of FileIO's save).
ERROR: LoadError: Keys must be strings (the names of variables), got df
Stacktrace:
[1] error(::String) at ./error.jl:33
[2] (::getfield(JLD, Symbol("##32#33")){Dict{Symbol,DataFrame}})(::JLD.JldFile) at /Users/jonas/.julia/packages/JLD/1BoSz/src/JLD.jl:1210
[3] #jldopen#14(::Base.Iterators.Pairs{Symbol,Bool,Tuple{Symbol,Symbol},NamedTuple{(:compatible, :compress),Tuple{Bool,Bool}}}, ::Function, ::getfield(JLD, Symbol("##32#33")){Dict{Symbol,DataFrame}}, ::String, ::Vararg{String,N} where N) at /Users/jonas/.julia/packages/JLD/1BoSz/src/JLD.jl:246
[4] #jldopen at ./none:0 [inlined]
[5] #save#31 at /Users/jonas/.julia/packages/JLD/1BoSz/src/JLD.jl:1206 [inlined]
[6] save at /Users/jonas/.julia/packages/JLD/1BoSz/src/JLD.jl:1206 [inlined]
[7] #save#15(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::String, ::Dict{Symbol,DataFrame}) at /Users/jonas/.julia/packages/FileIO/JAtC1/src/loadsave.jl:118
[8] save(::String, ::Dict{Symbol,DataFrame}) at /Users/jonas/.julia/packages/FileIO/JAtC1/src/loadsave.jl:118
[9] #collect_results!#34(::Array{String,1}, ::Bool, ::Bool, ::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::String, ::String) at /Users/jonas/.julia/packages/DrWatson/bCPTC/src/result_collection.jl:108
[10] collect_results!(::String, ::String) at /Users/jonas/.julia/packages/DrWatson/bCPTC/src/result_collection.jl:72
...
MWE:
using DrWatson, JLD, DataFrames
data = Dict("foo" => :bar)
mkdir("tmp")
save(joinpath("tmp", "a.jld"), data)
save(joinpath("tmp", "b.jld"), data)
collect_results!("results.jld", "tmp")
I don't know the internals/conventions for FileIO's save, so maybe this shouldn't be supported at all. However, using BSON as the output format, saving a Dict{Symbol} works just fine.