在Matlab中考虑table
。
a = table();
a.c = 'a';
如何在该表中添加一行包含不同长度的字符串?我想得到:
c
______
'a'
'aa'
例如,这种简单的尝试会产生错误:
b = table();
b.c = 'aa';
result = [a; b]
错误:
无法连接表变量' c'使用VERTCAT。 引起: 使用vertcat时出错 连接的矩阵的尺寸不一致。
答案 0 :(得分:1)
由于MATLAB的table
个对象如何处理包含的数据,它会尝试使用数据类型。偶尔当事情在幕后变得聪明时,他们会以一种对用户来说不一定明显的方式绊倒。
这里发生的事情是,由于您的c
列是使用字符数组创建的,因此MATLAB会尝试使此列保持同源并将'a'
与'aa'
连接起来。由于MATLAB将character arrays作为字符矩阵处理,这会导致错误输出,这会带来大小强制:所有行必须具有相同的列数。
您有几个选择:使用string array(在R2016b中引入),或使用cell array。虽然字符串数组本质上是单元格数组,但它们具有专用字符串方法的优点,允许您本机执行各种字符串操作,而无需显式索引到单元格数组。
要更改代码,只需使用双引号(""
)而不是单引号(''
):
a = table();
a.c = "a";
b = table();
b.c = "aa";
T = [a;b]
返回:
T =
2×1 table
c
____
"a"
"aa"
或者,您可以明确强制c
的类型为单元格数组:
a = table();
a.c = {'a'};
b = table();
b.c = 'aa';
T = [a; b]
返回相同的内容。
答案 1 :(得分:1)
如果您有整列数据,可以从单元格数组
创建一列tbl = table();
tbl.mycol = {'some text';
'something else';
'third item'};
如果你想附加一个项目(比如在循环中)你可以做
tbl = table();
mycell = {'some text';
'something else';
'third item'};
tbl.mycol = {};
for ii = 1:numel(mycell)
tbl.mycol(ii) = mycell(ii);
end
同样,你可以像数组
一样追加到最后tbl.mycol(end+1) = {'fourth item'};
您可以通过使用vertcat
连接两个表来合并它们myothercell = {'append this';
'...and this'};
tbl1 = table();
tbl1.mycol = mycell;
tbl2 = table();
tbl2.mycol = myothercell;
tbl3 = vertcat(tbl1, tbl2);