Dataframe 在Julia函数中将表达式作为参数

Dataframe 在Julia函数中将表达式作为参数,dataframe,julia,Dataframe,Julia,我试图在Julia中实现OLS回归,作为一个学习练习。我想要的一个特性是将公式作为参数(例如,“公式=Y~x1+x2”,其中Y、x1和x2是数据帧中的列)。这是一个例子 如何将公式/表达式“映射”到正确的数据框列?Julia statistics包中的公式作为宏实现。为~符号定义了宏,这意味着表达式由编译器解析。一旦被编译器解析,它们将存储为复合类型的Formula的rhs和lhs字段 实现的细节相对简单,可以在DataFrames.jl源代码中看到:使用作为输入 julia > usin

我试图在Julia中实现OLS回归,作为一个学习练习。我想要的一个特性是将公式作为参数(例如,“公式=Y~x1+x2”,其中Y、x1和x2是数据帧中的列)。这是一个例子


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

Julia statistics包中的公式作为宏实现。为
~
符号定义了宏,这意味着表达式由编译器解析。一旦被编译器解析,它们将存储为复合类型的
Formula
rhs
lhs
字段

实现的细节相对简单,可以在
DataFrames.jl
源代码中看到:

使用作为输入

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

下面是一个使用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