JuliaData / TypedTables.jl

Simple, fast, column-based storage for data analysis in Julia
Other
145 stars 25 forks source link

Error while reproducing generator example on "Finding Data" doc page #72

Closed natemcintosh closed 11 months ago

natemcintosh commented 3 years ago

Using Julia 1.5.4 I hit the following issue with TypedTables v1.2.4

julia> using TypedTables

julia> t = Table(name = ["Alice", "Bob", "Charlie"], age = [25, 42, 37])
Table with 2 columns and 3 rows:
     name     age
   ┌─────────────
 1 │ Alice    25
 2 │ Bob      42
 3 │ Charlie  37

julia> Table(row for row in t if row.age > 40)
ERROR: Cannot construct table from Base.Generator{Base.Iterators.Filter{var"#3#4",Table{NamedTuple{(:name, :age),Tuple{String,Int64}},1,NamedTuple{(:name, :age),Tuple{Array{String,1},Array{Int64,1}}}}},typeof(identity)}
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] _columns(::Base.Generator{Base.Iterators.Filter{var"#3#4",Table{NamedTuple{(:name, :age),Tuple{String,Int64}},1,NamedTuple{(:name, :age),Tuple{Array{String,1},Array{Int64,1}}}}},typeof(identity)}) at /Users/natemcintosh/.julia/packages/TypedTables/WimSA/src/Table.jl:45
 [3] Table(::Base.Generator{Base.Iterators.Filter{var"#3#4",Table{NamedTuple{(:name, :age),Tuple{String,Int64}},1,NamedTuple{(:name, :age),Tuple{Array{String,1},Array{Int64,1}}}}},typeof(identity)}; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /Users/natemcintosh/.julia/packages/TypedTables/WimSA/src/Table.jl:24
 [4] Table(::Base.Generator{Base.Iterators.Filter{var"#3#4",Table{NamedTuple{(:name, :age),Tuple{String,Int64}},1,NamedTuple{(:name, :age),Tuple{Array{String,1},Array{Int64,1}}}}},typeof(identity)}) at /Users/natemcintosh/.julia/packages/TypedTables/WimSA/src/Table.jl:24
 [5] top-level scope at REPL[3]:1

Any idea what might be going on here?

natemcintosh commented 3 years ago

I just realized that this will work if a list comprehension (vector comprehension?) is used, and wrapped in a Table constructor call, e.g.

julia> Table([row for row in t if row.age > 40])
Table with 2 columns and 1 row:
     name  age
   ┌──────────
 1 │ Bob   42
andyferris commented 3 years ago

Oh damn, I wonder when this was broken? I'll have to fix it - thanks.

natemcintosh commented 11 months ago

Looks like this is no longer broken