2017-10-02 4 views
1

私はparName|region|yearとして構造化されたDataFrameを持っていて、アクセス機能はgetData(parName,reg,year)です(私は独自のクエリロジックを実装しているためアクセス機能を使用しています)。ジュリアの動的関数名定義は可能ですか?

unique(df[:parName])に基づいて、par1(region,year)のような機能セットを動的に作成することは可能ですか?getData("par1",region,year)

もしそうなら、どのアプローチを使用していますか?

これは少しは...そこには、私はそれが可能に動的に宣言する場合/ 1を定義さまよいながら動的に、関数を呼び出す方法について説明します。.. this質問の反対である

EDIT:

私は多次元方程式を書く際に最もクリーンでコンパクトな構文を得るために、このアプローチを使用しています。 私のようにそれを実装する(@Lisoの答えのおかげで)管理:つまり、私はpar!()がsetDataメソッド型であるとpar_()はのgetData型方程式であるという規則を使用しています

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 

When I'll be able to complete the macro that transforms f(dim1,dim2) = value into f(value,dim1,dim2)私はLaTeXのような(そしてAMPLのような)を使用して、私のモデルを記述することができるようになります非常に明確である構文:

@meq price!(tp in secProducts, r in fr2) = sum(price_(r,pp,"",y2)*a_(r,pp,tp,y2) for pp in priProducts) + margin_(r,tp,"",y2) 
+0

なぜあなたも、このかかわらずをしますか?一般的に、配列に属していなければならないものには、一意の「順序付けられた」識別子を使用することを強くお勧めします。ほとんどの場合、2つの引数しか取らない関数が本当に必要な場合は、クロージャー生成関数と "currying"(つまり、get( "par1")(region、年) ') –

答えて

4

私はジュリアを理解しようとしている初心者ですので、それならば、私はわかりませんいいアイデアかどうか!

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) 

多分それはプレイするお手伝いをして学ぶことができました:)

関連する問題