我想根据光谱数据矩阵创建一个表格,使用特定的变量列表(列,这里对应于1000个光谱波长值),而不是手动输入名称。
为此,我使用array2table
函数,matlab文档显示行的名称和变量标签必须作为单元格数组(而不是矩阵)。所以我需要先将x轴(光谱波长)转换为单元阵列。我使用以下内容:
C = num2cell(xaxis);
%转换为单元格数组(每个单元格包含1个值)
isvarname C
%检查变量是否有效作为单元格数组
T = array2table(R,'RowNames', concentration,'VariableNames',C);
这里:R是矩阵,浓度是1x500的单元阵列,x轴是光谱数据1x1000的波长(范围从600到1800,大约没有空值)。
不幸的是,我收到以下错误: “使用array2table时出错(第62行) VariableNames属性必须是单元格数组,每个元素都包含一个非空字符串。“
这意味着我可以正确输入列(变量)名称(但行名称可以正常工作)。
注意:我试过了
T.Properties.VariableNames = c
但它也无效。
我检查了关于表名值的其他帖子,但没有帮助, 有没有想过这个? 非常感谢你。
答案 0 :(得分:2)
也许您错误输入了问题的代码,但似乎您使用的是数组xaxis
而不是C
。无论如何,我建议你尝试以这种方式将单元格内容转换为字符串
T = array2table(R,'RowNames', concentration,'VariableNames',cellfun(@(x)num2str(x),num2cell(xaxis),'uniformoutput',false));
通过table docs 查看
变量名,指定为由“VariableNames”组成的逗号分隔对和非空且不同的字符向量的单元格数组。字符向量的数量必须等于变量的数量。您指定的变量名称必须是有效的MATLAB®变量名称。您可以使用函数isvarname确定有效的变量名称。
此外,isvarname函数表示
有效变量名称以字母开头,且不得超过
namelengthmax
个字符。有效的变量名称可以包括字母,数字和下划线。 MATLAB关键字不是有效的变量名称。要确定输入是否为MATLAB关键字,请使用iskeyword
函数。
这意味着你不能自己使用xaxis
值作为变量名,你需要至少预先添加一个字符并删除小数点。您可以使用以下
T = array2table(R,'RowNames', concentration,...
'VariableNames',cellfun(@(x)['wavel_',regexprep(num2str(x),'.','_')],num2cell(xaxis),'uniformoutput',false));
此代码将“wavel_”添加到数字字符串值之前。它还将使用regexprep
函数替换带下划线的点。但是,似乎这实际上是不必要的,因为列名称并不真正提供信息。 array2table
函数的文档说如果您不提供'variableNames'
选项,它将执行以下操作:
如果有效的MATLAB标识符不能用作变量名,MATLAB将使用形式为{'Var1'...'VarN'}的N个字符向量的单元格数组,其中N是变量的数量。
也许使用默认变量名就足够了。