Я получаю такую ошибку:
Cannot concatenate the table variable 'epoch' because it is a cell in one table and a non-cell in another.
Чтобы воспроизвести ошибку:
A.epoch = [1,2,3]';
A.value = [10,20,30]';
Инициализированная пустая таблица с заголовками:
Aclean = cell2table(cell(1,2), 'VariableNames', {'epoch', 'value'});
Вертикально соедините 2 таблицы:
Aclean = vertcat(Aclean, struct2table(A));
Каков наилучший способ объединения таблиц с циклом for в Matlab?
Если я правильно понимаю, вы хотите инициализировать Aclean
перед циклом, а затем присоединять к нему данные на каждой итерации цикла. Если это так, вы можете просто инициализировать Aclean
пустым массивом:
Aclean = [];
A.epoch = [1,2,3].';
A.value = [10,20,30].';
Aclean = vertcat(Aclean, struct2table(A));
Однако, если вы заранее знаете, сколько строк вы добавите в таблицу, лучше заранее выделить всю таблицу:
% N = number of rows
A = array2table(zeros(N,2), 'VariableNames', {'epoch', 'value'});
A.epoch(1:3) = [1,2,3];
A.value(1:3) = [10,20,30];
Дешевле обрезать неиспользуемые строки снизу, чем добавлять на каждой итерации.
Еще одна альтернатива - работать с struct
и преобразовать его в table
после цикла. Структура - это встроенный тип, тогда как таблица реализована как настраиваемый класс. Таким образом, структуру будет более эффективно обновлять.
Не могли бы вы объяснить, где именно вы хотите задействовать цикл for? Чтобы добавить больше столбцов (переменных) или строк