different outcome cellfun(@isempty,..) vs cellfun('isempty',...)

7 vues (au cours des 30 derniers jours)
Senne Van Minnebruggen
Senne Van Minnebruggen le 11 Mar 2021
Réponse apportée : Rik le 11 Mar 2021
I have multiple tables stored in a cellarray. However some cells become empty [ ] after the removal of missing values.
My goal is to find out which cells become empty after this removal of ... .
I tried to do this with cellfun(@isempty,mycell) which does the job.
Further I tried to do this with cellfun('isempty',mycell) (according to what I've read this should be faster).
However the output is not the same (the last one returns a logical vector with all logical zero's).
I've checked the documentation but could not figure out why the outcomes differ.

Réponse acceptée

Rik
Rik le 11 Mar 2021
The reason is partly documented:
"If you specify a function name rather than a function handle cellfun does not call any overloaded versions of the function."
It turns out that the table data type has an overloaded isempty method. As far as I could find this is not documented.
The only solution is as Steven mentions: if you want to make sure you have the expected output, use the non-legacy syntax. If you need to add something that checks the classes of the cell elements all speedup is lost, so you can only use this for cell that you have complete control over.
For more context, see this post.

Plus de réponses (1)

Steven Lord
Steven Lord le 11 Mar 2021
I recommend you avoid using the 'isempty' syntax in new code. It is present for backwards compatibility with (very) old code and its behavior does differ from the function handle syntax as stated in the description of the func input argument on the documentation page for the cellfun function.

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Produits


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by