将表达式作为Julia函数的一个参数

时间:2016-10-05 19:55:56

标签: dataframe julia

我正试图在朱莉娅实施OLS回归作为学习练习。我想要的一个特性是将公式作为参数(例如'formula = Y~x1 + x2',其中Y,x1和x2是DataFrame中的列)。这是一个existing example

如何将公式/表达式“映射”到正确的DataFrame列?

3 个答案:

答案 0 :(得分:2)

Julia统计软件包中的公式是作为宏实现的。为~符号定义了一个宏,这意味着表达式由Julia编译器解析。一旦被编译器解析,它们就被存储为名为rhs的复合类型的lhsFormula字段。

相对简单的实施细节可以在DataFrames.jl源代码中看到:https://github.com/JuliaStats/DataFrames.jl/blob/725a22602b8b3f6413e35ebdd707b69c4ed7b659/src/statsmodels/formula.jl

答案 1 :(得分:1)

使用anonymous function作为输入。

julia > using DataFrames
julia > f = (x,y) -> x[:A] .* y[:B] # Anonymous function
julia > x = DataFrame(A = 6)
julia > y = DataFrame(B = 7)
julia > function OSL(x::DataFrame,y::DataFrame,f::Function);return f(x,y);end
julia > OSL(x,y,f)
1-element DataArrays.DataArray{Int64,1}:
  42

答案 2 :(得分:0)

这是使用来自ISLR的波士顿数据集的最小示例,在lstat上回归medv。 (如果要验证权重向量是否正确,请查看ISLR的第111页

julia> using DataFrames, RDatasets
julia> df = dataset("MASS", "Boston")
julia> fm = @formula(MedV ~ LStat)

julia> mf = ModelFrame(fm, df)
julia> X = ModelMatrix(mf).m
julia> y = Array(df[:MedV])
julia> w = X \ y

2-element Array{Float64,1}:
34.5538  
-0.950049

有关详细信息:http://dataframesjl.readthedocs.io/en/latest/formulas.html