JLD.jl icon indicating copy to clipboard operation
JLD.jl copied to clipboard

Cannot save Dict{Symbol}

Open jonas-schulze opened this issue 6 years ago • 0 comments
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.

jonas-schulze avatar Nov 04 '19 19:11 jonas-schulze