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

Я хочу сделать вышеуказанное утверждение. HF - таблица, также EH.имена динамических переменных с использованием таблиц Matlab

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:

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

Затем в проверке вменяемости, и везде в вашем коде, вам нужно добавить S. перед этим таблицам. Теперь вы можете заменить последнюю часть на:

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

Спасибо, что работает блестяще. – PalimPalim