Tables.jl
Tables.jl copied to clipboard
`Tables.dictcolumntable` produces columns with `#undef` instead of `missing` in struct-valued columns
julia> using Tables
julia> struct SSS
stuff
end
julia> Tables.dictcolumntable([(; a=SSS(1)), (; b=2)]).a
2-element Vector{Union{Missing, SSS}}:
SSS(1)
#undef
julia> Tables.columns(Tables.dictrowtable([(; a=SSS(1)), (; b=2)]))
Tables.CopiedColumns{NamedTuple{(:a, :b), Tuple{Vector{Union{Missing, SSS}}, Vector{Union{Missing, Int64}}}}} with 2 rows, 2 columns, and schema:
:a Union{Missing, SSS}
:b Union{Missing, Int64}
julia> Tables.columns(Tables.dictrowtable([(; a=SSS(1)), (; b=2)])).a
2-element Vector{Union{Missing, SSS}}:
SSS(1)
missing
julia> Tables.dictcolumntable([(; a=1), (; b=2)]).a
2-element Vector{Union{Missing, Int64}}:
1
missing
Looks like dictcolumntable
assumes that missing
is used instead of #undef
, but that's only the case for bitstypes. And even worse, singleton types may be used as the default instead of missing
, giving misleading results. So better initialize all the time the entry with missing
.
Sorry for the slow response: https://github.com/JuliaData/Tables.jl/pull/288