我有一个DataFrame结构为parName|region|year
,访问函数为getData(parName,reg,year)
(我使用访问函数,因为我实现了自己的查询逻辑)。
是否有可能基于unique(df[:parName])
动态创建一组指向“par1(region,year)
的{{1}}”函数?
如果是这样,使用哪种方法?
这与this问题有点相反..在那里我解释了如何动态调用函数,而如果可以动态声明/定义一个函数,我就会徘徊。
修改
我正在使用这种方法,以便在编写多维方程时获得最清晰,最紧凑的语法。 我设法(感谢@Liso答案)将其实现为:
getData("par1",region,year)
即,我使用for par in unique(dropna(df[:parName]))
@eval ($(Symbol("$(par)_"))) = (r,d1,d2="",y=-1,op=sum) -> gd($par,r,d1,d2,y,op)
@eval ($(Symbol("$(par)!"))) = (v,r,d1,d2="",y=-1) -> sd(v,$par,r,d1,d2,y)
end
是setData类型的约定,而par!()
是getData类型的等式。
When I'll be able to complete the macro that transforms f(dim1,dim2) = value
into f(value,dim1,dim2)
我将能够使用类似LaTeX(和类似AMPL)的语法编写我的模型,非常清楚:
par_()
答案 0 :(得分:5)
我只是初学者试图了解朱莉娅,所以我不确定这是不是好主意!
见https://docs.julialang.org/en/stable/manual/metaprogramming/#Code-Generation-1。
我能够适应这个例子:
julia> for i in 4:6
@eval ($(Symbol("func$i")))(a) = a^$i
end
julia> func4(2), func5(2), func6(2)
(16, 32, 64)
也许它可以帮助你玩和学习:)