2017-10-02 6 views
1

DataFrame을 parName|region|year으로 구성하고 액세스 기능을 getData(parName,reg,year) (내 자신의 쿼리 로직을 구현하기 때문에 액세스 기능을 사용합니다)으로 액세스했습니다.줄리아의 동적 함수 이름 정의가 가능합니까?

unique(df[:parName])을 기반으로 par1(region,year) ""을 가리키는 기능 집합을 동적으로 만들 수 있습니까?

그렇다면 어떤 접근 방식을 사용합니까?

이 조금 ..가 I가 가능한 동적 선언하는 경우에 /을 정의 배회하면서 동적으로 함수를 호출하는 방법을 설명한다 .. this 질문의 대향

EDIT :

저는 다차원 방정식을 작성할 때 가장 깨끗하고 간단한 구문을 사용하기 위해이 접근법을 사용하고 있습니다.

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 

즉, 내가 par!()이 사항 setData 형이고 par_()가 GetData의 형 방정식이라는 규칙을 사용하고 있습니다 :로 나는 그것을 구현합니다 (@Liso 답변 덕분에) 있었다. 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

왜 당신이 비록 이런 짓을 했을까하는 데 도움이 될 수 있을까? 일반적으로 어레이에 속해야하는 것에 대해 고유 한 '정렬 된'식별자를 사용하는 것은 매우 바람직하지 않습니다. 대부분의 경우 두 개의 인수 만 취하는 함수를 정말로 원한다면 클로저 생성 함수와 "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) 

가 연주 배우기 :