Matlab - Как объединить структуру и цикл, чтобы уменьшить количество операций? - PullRequest
0 голосов
/ 10 ноября 2019

Я выполняю операции с четырьмя массивами ячеек и хочу упростить мой код. Для каждого массива ячеек три вычисления одинаковы. Я попытался ввести структуру и цикл for, чтобы эти операции выполнялись как итерация. Однако структура не выполняет команды точно. В результате удаляется меньше строк, и результат отличается от отдельных операций.

Это пример ручной операции над одним из массивов ячеек:

%Importing and sorting QoL data
lr = tsv2cell('LifeRating.tsv');
lr(3:36,8) = lr(38:end,7);                             
lr(37:end,:) = [];
lr(:,[2:6,9:end]) = [];
lr = sortrows(lr(2:end,:),1);
lr = erase(lr,[" e", " b", " p"]); 
lr = standardizeMissing(lr,':');
lr = rmmissing(lr);`

В этомчасть, последние три строки являются операциями, которые выполняются для каждого массива ячеек, и, таким образом, могут быть помещены в цикл for. Структура и цикл, которые я реализовал, выглядят так:

s.pop=pop; s.gdp=gdp; s.fp=fp; s.lr=lr; 

f=fieldnames(s);
for c=1:length(f)
    s.(f{c})=erase(s.(f{c}),[" e", " b", " p"]); 
    s.(f{c})=standardizeMissing(s.(f{c}),':');
    s.(f{c})=rmmissing(s.(f{c}));
end

Я ожидал, что размеры массивов ячеек после использования структуры будут такими же, как при использовании операций по отдельности. Однако цикл for, похоже, не влияет на размеры. У кого-нибудь была идея, почему это может не сработать?

Большое спасибо!

...