当表包含变量中的嵌套表时,为什么innerjoin会失败

时间:2015-12-11 04:01:27

标签: matlab

例如

tmp = table((1:10).'*2,(1:10).', table(ones(10, 5), ones(10, 1)))
tmp2 = table((1:10).')

尝试

innerjoin(tmp, tmp2)

给出

>> innerjoin(tmp, tmp2)
Error using table/innerjoin (line 83)
You cannot subscript a table using only one subscript. Table subscripting requires
both row and variable subscripts.

然而

innerjoin(tmp(:, 1:2), tmp2)

很好。

1 个答案:

答案 0 :(得分:2)

我觉得有趣的是你的问题,但我在MATLAB中并不是很好我试图找到这个错误的原因:

显然,问题在于解决了表tmp的第三列问题。所以我试着看功能代码:

edit innerjoin

错误在这里:

[c,il,ir] = table.joinInnerOuter(a,b,leftOuter,rightOuter,leftKeyVals,rightKeyVals, ...
                                 leftVars,rightVars,leftVarNames,rightVarNames);

好吧让我们深入一点:观察这个方法:

在填写新表时,它使用此功能:

cvar_j = defaultarrayLike(szOut,'Like',leftvar_j);

并在此处崩溃,

leftvar_j = 

    Var1        Var2
____________    ____

[1x5 double]    1   
[1x5 double]    1   
[1x5 double]    1   
[1x5 double]    1   
[1x5 double]    1   
[1x5 double]    1   
[1x5 double]    1   
[1x5 double]    1   
[1x5 double]    1   
[1x5 double]    1    

最后一步:让我们找到为什么: 看看这个defaultarrayLike

if isfloat(x)
    y = nan(sz,'like',x);
elseif isnumeric(x)
    y = zeros(sz,'like',x);
elseif islogical(x)
    y = false(sz);
elseif ischar(x)
....
else
% *** this will fail if x is empty
y = x(1:0); y(n+1,p) = x(1); y = reshape(y(1:n,:),sz);

在这里!它会检查x的所有数据类型,但无法查找表,因此转到上一个else并尝试寻址到x(1:0),但我们记得,x是一个现在表,它需要多个参数!这是什么导致崩溃的原因!

我试图找到解决方案并找到这个主题:

MATLAB error "You can not subscript a table using only one subscript error" when adding table in another table

它没有被接受的答案,所以你的问题不重复,但它有OP的一些解决方案!试试吧!