在 MATLAB 中检测单元格条目 Table

Detect cell entries in MATLAB Table

我有一个 Matlab table(新的 'Table' class),我们称它为 A:

A=table([1;2;3],{'A';'B';'C'})

如您所见,有些列是双列,有些是单元格。

我想弄清楚哪些是细胞。

出于某种原因,没有 A.Properties.class 我可以使用,而且我似乎无法调用 iscell

"Matlab" 这样做的方法是什么?我是否必须遍历 table 的每一列才能找出它的 class?

一种方法-

out = cellfun(@(x) iscell(getfield(A,x)),A.Properties.VariableNames)

或者,更好的方法是像这样动态访问字段(变量)-

out = cellfun(@(x) iscell(A.(x)), A.Properties.VariableNames)

样本运行:

运行 #1 -

A=table([1;2;3],{4;5;6})
A = 
    Var1    Var2
    ____    ____
    1       [4] 
    2       [5] 
    3       [6] 
out =
     0     1

运行 #2 -

>> A=table([1;2;3],{'A';'B';'C'})
A = 
    Var1    Var2
    ____    ____
    1       'A' 
    2       'B' 
    3       'C' 
out =
     0     1

运行 #3 -

>> A=table([1;2;3],{4;5;6},{[99];'a';'b'},{'m';'n';'p'})
A = 
    Var1    Var2    Var3    Var4
    ____    ____    ____    ____
    1       [4]     [99]    'm' 
    2       [5]     'a'     'n' 
    3       [6]     'b'     'p' 
>> out
out =
     0     1     1     1

如果第二个变量是单元格类型,您可以使用 iscell(A.Var2) 进行测试。更一般地说,您可以通过索引引用列:

for k = 1 : width(A)
    disp(iscell(A.(k)))
end