2017-02-20 5 views
1
HF.EH = EH.Return_EH; 

私は上記の文をしたいと思います。 HFはテーブルなので、EHもそうです。matlab-tablesを使用する動的変数名

str = 'HE' 
HF.(str) = (str).Return_EH; 

最後のコード行が機能していません。 "HF。(str)"は問題ありません。 "(str).Return_EH"はそうではありません。 "(str).Return_EH"をどうすればいいですか?

今の私のコードは以下のようになります。

EH = importraw('HFRX_Equity_Hedge_Index.csv', 'EH'); 
EMN = importraw('HFRX_Equity_Market_Neutral_Index.csv', 'EMN'); 
EDI = importraw('HFRX_Event_Driven_Index.csv', 'EDI'); 
FICA = importraw('HFRX_FI-Convertible_Arbitrage_Index.csv', 'FICA'); 
MCTA = importraw('HFRX_Macro_CTA_Index.csv', 'MCTA'); 
MAI= importraw('HFRX_Merger_Arbitrage_Index.csv', 'MAI'); 
RVA = importraw('HFRX_Relative_Value_Arbitrage_Index.csv', 'RVA'); 

% sanity check 
if not(isequal(EH.Date, EMN.Date, EDI.Date, FICA.Date, MCTA.Date, MAI.Date, RVA.Date)); 
error('Mismatch in Data'); 
end 


% merge Hedgefund Data 
HF = array2table(zeros(size(EH,1),8), 'VariableNames',{'Date', ... 
        'EH', 'EMN', 'EDI', 'FICA', 'MCTA', 'MAI', 'RVA'}); 
HF.Date = EH.Date;      
HF.EH = EH.Return_EH; 
HF.EMN = EMN.Return_EMN; 
HF.EDI = EDI.Return_EDI; 
HF.FICA = FICA.Return_FICA; 
HF.MCTA = MCTA.Return_MCTA; 
HF.MAI = MAI.Return_MAI; 
HF.RVA = RVA.Return_RVA; 

私はもっと良い方法があるはずと思いました。

+0

私はeval()を除いたソリューションを希望します。 – PalimPalim

+2

動的変数はひどいひどいひどいひどい考えです。それはひどい恐ろしいアイデアなので、あなたは 'eval'を使わないと言ってうれしく思います。グローバルを使用していないと教えてください! –

+0

:Dいいえグローバルを使用していません – PalimPalim

答えて

1

動的変数名を検索する代わりに、テーブルHFと同じ方法で構造体を使用できます。あなたの健全性チェックに続いて

S.EH = importraw('HFRX_Equity_Hedge_Index.csv', 'EH'); 
S.EMN = importraw('HFRX_Equity_Market_Neutral_Index.csv', 'EMN'); 
% and so on... 

、および他のどこでも、あなたのコードでは、このテーブルの前にS.を追加する必要があります。まず、あなたは一つの構造Sにすべてのデータをインポートします。最後の部分を次のように置き換えることができます:

fld = fieldnames(S); 
for k = 1:numel(fld) 
    HF.(fld{k}) = S.(fld{k}).(['Return_' fld{k}]); 
end 
+0

ありがとう、それはすごくうまくいきます。 – PalimPalim

関連する問題