表格变量名称可以以数字字符开头吗?

问题描述:

我运行是这样的:表格变量名称可以以数字字符开头吗?

table = readtable(path,'ReadVariableNames',true); 

在.csv文件所有的第一行的单元格包含字符串标识符像'99BM''105CL',等一切始于一个数字。上面的命令给出了一个带有变量名称的表,如'x99BM','x105CL'等。

是否有可能摆脱这种'x'?我需要将这些标识符与清除此'x'的另一个表的列进行比较。

+0

**注意:**不要使用'table'作为变量名称,因为它会影响现有函数。 – gnovice

不,表变量名称不能以数字开头,因为它们遵循与normal variables相同的命名约定。 'x'自动添加readtable以创建一个有效的名称。调用readtable时,您应该已经注意到了这样的警告:

Warning: Variable names were modified to make them valid MATLAB identifiers. 
The original names are saved in the VariableDescriptions property. 

所以,你不能让内表摆脱'x'的。但是,如果你需要做任何比较,你可以做他们不要保存在VariableDescriptions property的原始值,这将有这样的格式:

>> T.Properties.VariableDescriptions 

ans = 

    1×2 cell array 

    'Original column heading: '99BM'' 'Original column heading: '105CL'' 

您可以用regular expression分析这些,例如:

originalNames = regexp(T.Properties.VariableDescriptions, '''(.+)''', 'tokens', 'once'); 
originalNames = vertcat(originalNames{:}); 

originalNames = 

    2×1 cell array 

    '99BM' 
    '105CL' 

然后在你需要做的任何字符串比较中使用这些。

否如gnovice所述,可读函数自动重命名无效名称。它通过调用matlab.lang.makevalidname并将输出设置为列名执行此操作。

如果我理解正确,您将比较一个表中列的内容与另一个表的列的名称。在这种情况下,contains(['x' <contents of single row of column>], table.VariableNames)会将x预加到表列中某行的值(对于此实现,您需要循环遍历表的每一行),然后将此字符串与表的变量名进行比较。你也可以用arrayfun或其他东西在一行中做到这一点,但我现在正在从内存中做这件事,并且不能记起正确的语法。