Dear all,
this topic has been inactive for a few months, but I just wanted to add that I implemented a package to solve the first problem posted, namely how to add metadata information to a DataFrame.
The trick is to use composition and the ReusePatterns package to automatically forward all method calls from one type to another. The relevant code is:
using ReusePatterns
struct DataFrameMeta <: AbstractDataFrame
p::DataFrame
meta::Dict{String, Any}
DataFrameMeta(args...; kw...) = new(DataFrame(args...; kw...), Dict{Symbol, Any}())
DataFrameMeta(df::DataFrame) = new(df, Dict{Symbol, Any}())
end
meta(d::DataFrameMeta) = getfield(d,:meta) # <-- new functionality added to DataFrameMeta
@forward((DataFrameMeta, :p), DataFrame) # <-- reuse all existing functionalities
while the whole example can be found here.
With the above code we can use an object of type DataFrameMeta
as if it was a simple DataFrame
, but taking advantage of the new meta
method to gain access to the associated metadata dictionary.
Comments are welcome!