Первая строка cellfun
документации говорит (выделено мое):
Применить функцию к каждой ячейке в массив ячеек .
При втором и третьем использовании cellfun
у вас нет массивов ячеек, поэтому они не работают.
При вашем втором использовании cellfun
т.е. x = cellfun(@(u) numel(u), s.f2);
s.f2
возвращает список через запятую. Чтобы получить тот же результат, используя cellfun
, вы можете объединить список через запятую в массиве ячеек, а затем cellfun
следующим образом:
x = cellfun(@(u) numel(u), {s.f2});
При третьем использовании cellfun
, Вы вводите векторную структуру. В этом случае, чтобы получить тот же результат, вы можете применить arrayfun
более удобно, как это:
x = arrayfun(@(u) numel([u.f2]), s);