2014-02-17 3 views

ответ

1

Там в assignin функция, которая принимает имя переменной и присвоить ему определенное значение:

for r = 1:size (DATA, 1) 
    assignin ('caller', DATA{r,:}); 
end 
+0

это не будет работать в функции. или, что еще хуже, он будет работать с неожиданными результатами: переменные будут назначаться в '' base'', а не в контексте функции: O – Shai

+0

@Shai ups! Вы правы. Я неправильно понял 'base' и' caller', я думал, что 'caller' был 1 уровень вниз в стеке и основывает текущую область. – carandraug

5

Вы можете сделать это с помощью eval

for ii = 1:size(DATA,1) 
    eval([DATA{ii,1}, ' = ', num2str(DATA{ii,2})]); 
end 

Однако использование eval является not recommended.

Вы можете использовать динамические имена полей вместо:

s = cell2struct(DATA(:,2), DATA(:,1), 2); 
+1

это не будет охватывать случаи, когда переменная не является вектором, например матрицей ND (или даже 2D-матрицей), массивом ячеек, структурами и т. Д. – carandraug

+1

+1 Иногда 'eval' - это способ пойти –

+0

@ carandraug you являются правильными. Я использовал 'num2str' вместо моего личного любимого' sprintf' просто для покрытия простых векторов. Но у 'eval' действительно есть ограничения. Может быть, в сочетании с 'disp'? Я предпочитаю структуру с динамическими именами ... – Shai

Смежные вопросы