# DataFramesMeta @linq does not dispatch to StatsBase.mean?

**URL:** <https://discourse.julialang.org/t/dataframesmeta-linq-does-not-dispatch-to-statsbase-mean/10343>\
**Category:** Data\
**Tags:** question\
**Created:** [April 14, 2018, 8:14pm UTC](https://discourse.julialang.org/t/dataframesmeta-linq-does-not-dispatch-to-statsbase-mean/10343 "2018-04-14T20:14:41Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![floswald](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/floswald/32/195_2.png) [@floswald](https://discourse.julialang.org/u/floswald)\
**Post date:** [April 14, 2018, 8:14pm UTC](https://discourse.julialang.org/t/dataframesmeta-linq-does-not-dispatch-to-statsbase-mean/10343/1 "2018-04-14T20:14:41Z")

</div>

I have this issue with DataFramesMeta

```julia
using DataFrames, DataFramesMeta, StatsBase

julia> d = DataFrame(a=1:10,b = 2.0 * (1:10),w=Weights([1,zeros(9)...]))
10×3 DataFrames.DataFrame
│ Row │ a │ b │ w │
├─────┼────┼──────┼─────┤
│ 1 │ 1 │ 2.0 │ 1.0 │
│ 2 │ 2 │ 4.0 │ 0.0 │
│ 3 │ 3 │ 6.0 │ 0.0 │
│ 4 │ 4 │ 8.0 │ 0.0 │
│ 5 │ 5 │ 10.0 │ 0.0 │
│ 6 │ 6 │ 12.0 │ 0.0 │
│ 7 │ 7 │ 14.0 │ 0.0 │
│ 8 │ 8 │ 16.0 │ 0.0 │
│ 9 │ 9 │ 18.0 │ 0.0 │
│ 10 │ 10 │ 20.0 │ 0.0 │

julia> @linq d |>
       @where(:a .>3) |>
       @select(b=mean(:b,:w))
ERROR: ArgumentError: reduced dimension(s) must be integers
Stacktrace:
 [1] reduced_indices(::Tuple{Base.OneTo{Int64}}, ::Array{Float64,1}) at ./reducedim.jl:35
 [2] reducedim_initarray at ./reducedim.jl:73 [inlined]
 [3] mean(::Array{Float64,1}, ::Array{Float64,1}) at ./statistics.jl:57
 [4] (::###700#27{DataFrames.DataFrame})(::Array{Float64,1}, ::Array{Float64,1}) at /Users/florian.oswald/.julia/v0.6/DataFramesMeta/src/DataFramesMeta.jl:70

julia> @linq d |>
       @where(:a .>3) |>
       @select(b=StatsBase.mean(:b,:w))
ERROR: MethodError: Cannot `convert` an object of type Expr to an object of type DataFramesMeta.SymbolParameter
This may have arisen from a call to the constructor DataFramesMeta.SymbolParameter(...),
since type constructors fall back to convert methods.

```

From the first error I infer that `mean` is dispatching to `Base.mean` because this is where this error comes from. How can I make it use the version that accepts a `Weights` vector?

---

<div class="post-metadata">

**Author:** ![nalimilan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nalimilan/32/147_2.png) [@nalimilan](https://discourse.julialang.org/u/nalimilan)\
**Post date:** [April 14, 2018, 8:56pm UTC](https://discourse.julialang.org/t/dataframesmeta-linq-does-not-dispatch-to-statsbase-mean/10343/2 "2018-04-14T20:56:57Z")

</div>

The problem comes from the `@where`, as subsetting a weights vector returns a normal vector. We should add methods in StatsBase so that it returns another weights vector. Can you file an issue (or even better a PR)?

---

<div class="post-metadata">

**Author:** ![floswald](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/floswald/32/195_2.png) [@floswald](https://discourse.julialang.org/u/floswald)\
**Post date:** [April 15, 2018, 8:29am UTC](https://discourse.julialang.org/t/dataframesmeta-linq-does-not-dispatch-to-statsbase-mean/10343/3 "2018-04-15T08:29:44Z")

</div>

filed issue:

[https://github.com/JuliaStats/StatsBase.jl/issues/371](https://github.com/JuliaStats/StatsBase.jl/issues/371)
