例子:
>> A = table({}, {}, {}, {}, {}, ...
'VariableNames', {'Foo', 'Bar', 'Baz', 'Frobozz', 'Quux'});
>> vn = A.Properties.VariableNames;
>> isequal(vn, A.Properties.VariableNames)
ans =
1
到目前为止一切顺利,但即使
vn
和 A.Properties.VariableNames
看起来相同,当人们试图从它们(使用 {:}
)获取“逗号分隔列表”时,它们的行为却大不相同:>> {'Frobnitz', vn{:}}
ans =
'Frobnitz' 'Foo' 'Bar' 'Baz' 'Frobozz' 'Quux'
>> {'Frobnitz', A.Properties.VariableNames{:}}
ans =
'Frobnitz' 'Foo'
有没有办法直接从 A.Properties.VariableNames 获取“逗号分隔列表”(即,无需创建像
vn
这样的中间变量)?(此外,是否有比
isequal
更可靠的函数来测试单元格数组的相等性?在上面的示例中,vn
和 A.Properties.VariableNames
显然不够相等!)对于那些没有支持(相当新的)
table
对象的 MATLAB 版本的人,如果使用 dataset
对象(来自统计工具箱),情况也是一样的。上面的例子然后将转换为:clear('A', 'vn');
A = dataset({}, {}, {}, {}, {}, ...
'VarNames', {'Foo', 'Bar', 'Baz', 'Frobozz', 'Quux'});
vn = A.Properties.VarNames;
isequal(vn, A.Properties.VarNames)
{'Frobnitz', vn{:}}
{'Frobnitz', A.Properties.VarNames{:}}
(注意从
VariableNames
到 VarNames
的变化;省略了输出:它与上面显示的输出相同): 最佳答案
isequal
没有问题。 vn
和 A.Properties.VariableNames
实际上是相等的。问题是别的...
如果你输入 help dataset.subsref
,你会得到一个解释为什么会发生这种情况,这应该与 table
类的解释相同:
简而言之,当您调用 A.Properties.VarNames{:}
行时,您正在调用 dataset.subsref
方法,并且花括号下标 {:}
正与其他 .
下标一起传递给它,而不是在调用之后单独应用dataset.subsref
方法。
因此,在不使用中间变量的情况下,您似乎无法直接从 A
获取逗号分隔的列表。但是,如果您的目标(如您的示例中所示)是将字符串与另一个字符串连接到一个新的元胞数组中,则可以执行以下操作:
>> [{'Frobnitz'} A.Properties.VarNames]
ans =
'Frobnitz' 'Foo' 'Bar' 'Baz' 'Frobozz' 'Quux'
关于matlab - 如何直接从 table.Properties.VariableNames 获取逗号分隔的列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21532915/