jkrumbiegel / DataFrameMacros.jl

Macros that simplify working with DataFrames.jl
MIT License
61 stars 4 forks source link

Parsing bug #2

Closed xiaodaigh closed 3 years ago

xiaodaigh commented 3 years ago
using Dates
df = DataFrame(a = Day(1))

@transform(df, :b = :a + :a)

@transform(df, :b = Dates.value(:a)) # seems to be an error parsing this line

The above fails with this error

ERROR: ArgumentError: column name :value not found in the data frame
Stacktrace:
  [1] lookupname
    @ C:\Users\RTX2080\.julia\packages\DataFrames\nxjiD\src\other\index.jl:288 [inlined]
  [2] getindex
    @ C:\Users\RTX2080\.julia\packages\DataFrames\nxjiD\src\other\index.jl:297 [inlined]
  [3] (::DataFrames.var"#445#446"{DataFrames.Index})(n::Symbol)
    @ DataFrames .\none:0
  [4] iterate
    @ .\generator.jl:47 [inlined]
  [5] collect(itr::Base.Generator{Vector{Symbol}, DataFrames.var"#445#446"{DataFrames.Index}})
    @ Base .\array.jl:678
  [6] normalize_selection(idx::DataFrames.Index, sel::Pair{var"#s422", var"#s421"} where {var"#s422", var"#s421"<:(Pair{var"#s420", var"#s419"} where {var"#s420"<:Union{Function, Type}, var"#s419"<:Union{AbstractVector{Symbol}, AbstractString, DataType, Symbol, AbstractVector{var"#s418"} where var"#s418"<:AbstractString}})}, renamecols::Bool)
    @ DataFrames C:\Users\RTX2080\.julia\packages\DataFrames\nxjiD\src\abstractdataframe\selection.jl:250
  [7] manipulate(::DataFrame, ::Any, ::Vararg{Any, N} where N; copycols::Bool, keeprows::Bool, renamecols::Bool)
    @ DataFrames C:\Users\RTX2080\.julia\packages\DataFrames\nxjiD\src\abstractdataframe\selection.jl:1297
  [8] #select#473
    @ C:\Users\RTX2080\.julia\packages\DataFrames\nxjiD\src\abstractdataframe\selection.jl:926 [inlined]
  [9] transform(df::DataFrame, args::Any; copycols::Bool, renamecols::Bool)
    @ DataFrames C:\Users\RTX2080\.julia\packages\DataFrames\nxjiD\src\abstractdataframe\selection.jl:1004
 [10] transform(df::DataFrame, args::Any)
    @ DataFrames C:\Users\RTX2080\.julia\packages\DataFrames\nxjiD\src\abstractdataframe\selection.jl:993
 [11] top-level scope
    @ c:\git\DFMacros\src\DFMacros.jl:186

But

Dates.value.(df.a)

is fine

jkrumbiegel commented 3 years ago

Thanks for the report, seems like I forgot QuoteNodes don't just appear when using :symbol but also in Module.symbol. I fixed that.

Also, your first line that seemingly "worked" had another tricky bug, because it would just result in [:a] => ByRow(+) not [:a, :a] => ByRow(+). Two edge cases in one! Also fixed that.