ошибка Horzcat с Eval в Matlab - PullRequest
       42

ошибка Horzcat с Eval в Matlab

0 голосов
/ 29 июля 2011

Я пытаюсь использовать eval, чтобы назначить cellValue для поля в структуре. Структура была предварительно инициализирована. Я получаю ошибку Horzcat, которую не могу удалить. Можете ли вы помочь мне здесь. Кроме того, я знаю, что использование eval не рекомендуется. Можете ли вы предложить лучшую альтернативу, которую можно использовать здесь. cellValue - это большая ячейка с почти 200 000 строк, и этот шаг будет выполняться повторно. Так что векторизация и эффективность необходимы. Спасибо!

varA = struct('Raw', -1, 'ttm', -1, 'USD', -1) ;
cellValue = { 'AAPL' [10010] 'abc' ;  
              'AAPL' [10020] 'abc' ; 
              'AAPL' [10030] 'abc' } ;

eval([varA '.Raw = ' cellValue ]) %gives horzcat ERROR

% Желаемый результат от varA.Raw = cellValue

varA = 
    Raw: {3x3 cell}
    ttm: -1
    USD: -1

Ответы [ 3 ]

2 голосов
/ 30 июля 2011

Это выражение:

[varA '.Raw = ' cellValue ]

пытается объединить структуру, строку и ячейку в одну матрицу, что невозможно.Вот почему вы получаете ошибку Horzcat.В чем я не уверен, так это почему вы используете eval.Это достигает желаемого результата:

varA.Raw = cellValue;

Если вы действительно хотите это в eval, вы можете сделать

eval('varA.Raw = cellValue;')
2 голосов
/ 29 июля 2011

EDIT:

Вы можете добавить другой уровень вложенности и использовать динамические имена полей для ссылки на имена переменных:

varName = 'A';
vars.(varName).Raw = value;

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

>> vars
vars = 
    A: [1x1 struct]
    B: [1x1 struct]
    C: [1x1 struct]

>> vars.A
ans = 
    Raw: {3x3 cell}
    ttm: -1
    USD: -1

>> vars.A.Raw
ans = 
    'AAPL'    [10010]    'abc'
    'AAPL'    [10020]    'abc'
    'AAPL'    [10030]    'abc'
0 голосов
/ 29 июля 2011

хорошо, это работает:

str = strcat(varA,'.Raw = cellValue ')  
%varA changes every time. cellValue name is constant.

eval(str)
...