Equivalent of deal for a table

3 vues (au cours des 30 derniers jours)
Kelly Kearney
Kelly Kearney le 28 Juil 2015
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 commentaires
Kelly Kearney
Kelly Kearney le 28 Juil 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 le 29 Juil 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)

Connectez-vous pour commenter.

Réponses (1)

Bernard
Bernard le 7 Fév 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)))

Catégories

En savoir plus sur Creating, Deleting, and Querying Graphics Objects dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by