如何在Matlab中重命名表变量?

时间:2016-12-29 00:23:29

标签: matlab cell-array axis-labels

我想根据光谱数据矩阵创建一个表格,使用特定的变量列表(列,这里对应于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但它也无效。

我检查了关于表名值的其他帖子,但没有帮助, 有没有想过这个? 非常感谢你。

1 个答案:

答案 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是变量的数量。

也许使用默认变量名就足够了。