Equivalent of deal for a table

4 Ansichten (letzte 30 Tage)
Kelly Kearney
Kelly Kearney am 28 Jul. 2015
Beantwortet: Bernard am 7 Feb. 2021
I often use deal to change the values of several cells in a cell array of strings:
a = 1:5;
b = {'one', 'two', 'three', 'four', 'five'};
[b{a>3}] = deal('big');
However, I just discovered that attempting the same operation on a table variable throws an error:
a = 1:5;
b = {'one', 'two', 'three', 'four', 'five'};
t = table(a,b);
[t.b{t.a>3}] = deal('big');
yields:
Expected one output from a curly brace or dot indexing expression, but there were 2
results.
Is there an equivalent syntax to quickly reassign values in a table?
  3 Kommentare
Kelly Kearney
Kelly Kearney am 28 Jul. 2015
Yes, looking further into it, it seems this is documented (though somewhat difficult to find) in the help for the @table/subsasgn method:
% LIMITATIONS:
%
% You cannot assign multiple values into a table variable or property using
% assignments such as
% [A.CellVar{1:2}] = deal(B1,B2),
% [A.StructVar(1:2).field] = deal(B1,B2), or
% [A.Properties.ObsNames{1:2}] = deal(B1,B2)
% Use multiple assignments of the form A.CellVar{1} = B1 instead.
Oh well.
Cedric
Cedric am 29 Jul. 2015
Hmm, not as bad as a rainbow color map ;-) but still.. well, hopefully this will become a built-in in a near future! (not 2015b though, because I have the same issue on the pre-release)

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Bernard
Bernard am 7 Feb. 2021
It would be nice to have this functionality. In the meantime, this works, although not as elegant.
t.b(t.a>3) = repmat({'big'}, size(t.b(t.a>3)))

Kategorien

Mehr zu Tables finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by