【问题标题】:How to rename table variables in Matlab?如何在 Matlab 中重命名表变量?
【发布时间】:2017-05-13 07:12:07
【问题描述】:

我想使用特定的变量列表(列,此处对应 1000 个光谱波长值)从光谱数据矩阵创建一个表格,而不是手动输入名称。 为此,我使用array2table 函数,matlab 文档显示变量的行和标签的名称必须作为元胞数组(而不是矩阵)。所以我需要首先将我的 x 轴(光谱波长)转换为单元阵列。我使用以下内容:

C = num2cell(xaxis); % 转换为单元格数组(每个单元格包含1个值)

isvarname C % 检查变量作为元胞数组是否有效

T = array2table(R,'RowNames', concentration,'VariableNames',C);

这里:R是矩阵,浓度是1x500的Cell array,xaxis是1x1000光谱数据的波长(范围从600到1800,大约没有零值)。

不幸的是,我收到以下错误: “使用 array2table 时出错(第 62 行) VariableNames 属性必须是一个元胞数组,每个元素都包含一个非空字符串。"

这意味着我可以正确输入列(变量)名称(但是,行名称可以正常工作)。 注意:我试过 T.Properties.VariableNames = c 但它也不起作用。

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

【问题讨论】:

标签: matlab cell-array axis-labels


【解决方案1】:

也许您打错了问题的代码,但您似乎使用的是数组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 是变量的数量。

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

【讨论】:

  • 看起来不错,但是由于 xaxis 由数字组成,我收到以下错误:'600.669' is not a valid variable name.
  • 如果您真的想使用数字作为变量名,您可以使用regexprep 将点替换为下划线。我会检查这些是否允许
  • 文档有点粗略,但说变量名必须是可以是有效工作区变量名的字符串。这意味着不允许使用除下划线以外的任何符号。名称中只能包含 ascii 字母、数字和下划线。
  • 亲爱的 Lucianopaz,非常感谢您的宝贵意见,但是当我只使用 xaxis 的前 3 位数字(600、602、... 1800)时,它不起作用。只有数字可能不允许?
  • @arno,我知道 MATLAB 在命名表中的变量方面有其局限性,但我认为我的回答指出了它们并建议了如何解决它们。你还需要什么才能接受我的回答是正确的?
猜你喜欢
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2015-09-17
相关资源
最近更新 更多