table 变量名可以以数字字符开头吗?
Can table variable names start with a number character?
我是运行这样的人:
table = readtable(path,'ReadVariableNames',true);
在 .csv 文件中,第一行的所有单元格都包含字符串标识符,例如 '99BM'
、'105CL'
等。一切都以数字开头。上面的命令给出了一个 table 变量名,如 'x99BM'
、'x105CL'
等
有没有可能摆脱这个'x'
?我需要将这些标识符与另一个 table 的列进行比较,该 'x'
.
不,table 变量名不能以数字开头,因为它们遵循与 normal variables. The 'x'
is automatically added by readtable
相同的命名约定来创建有效名称。你应该在调用 readtable
:
时注意到这个警告
Warning: Variable names were modified to make them valid MATLAB identifiers.
The original names are saved in the VariableDescriptions property.
因此,您无法在 table 中删除 '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 所提到的,readtable 函数会自动重命名无效名称。它通过调用 matlab.lang.makevalidname 并将输出设置为列名来实现。
如果我没理解错的话,您是在比较一个 table 的列的内容与另一个 table 的列的名称。在这种情况下,contains(['x' <contents of single row of column>], table.VariableNames)
会将 x 添加到 table 列的一行中的值(对于此实现,您需要遍历 table 的每一行),然后比较此字符串用table的变量名。您也可以使用 arrayfun 或其他东西在一行中执行此操作,但我现在是凭记忆执行此操作,无法回忆起正确的语法。
我是运行这样的人:
table = readtable(path,'ReadVariableNames',true);
在 .csv 文件中,第一行的所有单元格都包含字符串标识符,例如 '99BM'
、'105CL'
等。一切都以数字开头。上面的命令给出了一个 table 变量名,如 'x99BM'
、'x105CL'
等
有没有可能摆脱这个'x'
?我需要将这些标识符与另一个 table 的列进行比较,该 'x'
.
不,table 变量名不能以数字开头,因为它们遵循与 normal variables. The 'x'
is automatically added by readtable
相同的命名约定来创建有效名称。你应该在调用 readtable
:
Warning: Variable names were modified to make them valid MATLAB identifiers.
The original names are saved in the VariableDescriptions property.
因此,您无法在 table 中删除 '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 所提到的,readtable 函数会自动重命名无效名称。它通过调用 matlab.lang.makevalidname 并将输出设置为列名来实现。
如果我没理解错的话,您是在比较一个 table 的列的内容与另一个 table 的列的名称。在这种情况下,contains(['x' <contents of single row of column>], table.VariableNames)
会将 x 添加到 table 列的一行中的值(对于此实现,您需要遍历 table 的每一行),然后比较此字符串用table的变量名。您也可以使用 arrayfun 或其他东西在一行中执行此操作,但我现在是凭记忆执行此操作,无法回忆起正确的语法。