从不同表中的变量值构建Matlab表时出错

从不同表中的变量值构建Matlab表时出错,matlab,Matlab,尝试在Matlab中构建一个表来构建一个简单的3×x表 我有一个较大的表,其中包含一系列序列号,例如: 我正在尝试将这些相同的数字存储在新表Compensation\u table变量名Serial\u Number下的第一列中。请看我下面的脚本作为我正在做的示例 SN = 0; WT = 0; CM = 0; SerialNumber = {}; WearTime = {}; Commands = {}; Compensation_Table = table(SerialNumber,

尝试在Matlab中构建一个表来构建一个简单的3×x表

我有一个较大的表,其中包含一系列序列号,例如:

我正在尝试将这些相同的数字存储在新表
Compensation\u table
变量名
Serial\u Number
下的第一列中。请看我下面的脚本作为我正在做的示例

SN = 0;
WT = 0;
CM = 0;

SerialNumber = {};
WearTime = {};
Commands = {};

Compensation_Table = table(SerialNumber, WearTime, Commands);
Compensation_Table.Properties.VariableNames = {'Serial_Number', 'Wear_Time', 'Commands'};

for SN_ind = 1:height(Data_Analysis_Table)
    SN = cell2mat(Data_Analysis_Table.Serial_Number(SN_ind));
    
    Compensation_Table.SerialNumber(SN_ind) = SN;
    Compensation_Table.WearTime(SN_ind) = WT;
    Compensation_Table.Commands(SN_ind) = CM;
end
然而,当我这样做的时候,我会遇到这个错误

无法执行分配,因为左侧的索引与右侧的大小不兼容。


不确定为什么会发生这种情况?

这里的问题是,序列号列中填充了要向其添加1xn字符数组的
1x1
单元格数组。下面是一个简单的演示

a = {'row 1 string';'row 2 another string'} % a simple cell array of strings
b = cell2table(a)
b{end+1,1} = 'asdfasdf' % or b.a{end+1} = 'asdfasdf';
这里最后一行将发出错误

赋值中的表变量数必须匹配

但是,由于右侧是一个
1x1
单元阵列,因此以下操作将起作用:

b{end+1,1} = {'asdfasdf'}; % or b.a{end+1} = {'asdfasdf'};
b{end+1,1}={[1 2 3;4 5 6]}; %
有两种可能的修复方法:1。将字符数组字符串转换为较新样式的字符串变量(请参见),或2。将值存储为
1x1
单元数组

第一种解决方案是在查找之前将所有字符数组转换为字符串,并使用
string
;要做到这一点,请尝试以下方法

Data_Analysis_Table.Serial_Number=string(Data_Analysis_Table.Serial_Number);
但是,接下来需要确保所有传统的字符数组和字符串单元格都转换为较新的字符串数据类型(有关更多信息,请参阅)

处理字符数组和单元格字符串的另一种方法是将序列号作为单元格存储在新表中

  • 在循环的第一行中删除对char数组的
    cell2mat
    转换

  • 通过将循环中的第二行更改为以下内容之一,将
    SN
    替换为
    {SN}
    (即用大括号将
    SN
    括起来)

    Data_Analysis_Table.Serial_Number=string(Data_Analysis_Table.Serial_Number);
    
    • compensation_table.SerialNumber(SN_ind)={SN}
    • compensation_table.SerialNumber{SN_ind}=SN
    请注意大括号用于创建单元数组或在单元数组的元素内存储数据的不同用法