例如
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)
很好。
答案 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
是一个现在表,它需要多个参数!这是什么导致崩溃的原因!
我试图找到解决方案并找到这个主题:
它没有被接受的答案,所以你的问题不重复,但它有OP的一些解决方案!试试吧!