1) Предполагая, что поля структуры содержат значения как double
, chararray
, cellarray
или вложенные struct
, следующая рекурсивная функция возвращает логическое true
, если найдено NaN
либо в виде double
, либо в виде строки 'NaN'
:
function hasNaN = STRUCT_hasNaN(s)
if(iscell(s)), c = s; else, c = struct2cell(s); end
i = cellfun(@isnumeric, c);
j = cellfun(@ischar, c);
k = cellfun(@isstruct, c) | cellfun(@iscell, c);
hasNaN = nnz(cellfun(@isnan, c(i))) || nnz(strcmpi(c(j), 'nan')) || nnz(cellfun(@STRUCT_hasNaN, c(k)));
end
, которую можно использовать как:
if(STRUCT_hasNaN(Parameter))
disp('Warning! Parameter set not complete!');
end
2) Предполагая, что все поля содержат значения как двойные, и предупреждение должно быть выдано как минимум значением NaN:
if(nnz(isnan(struct2array(Parameter))))
disp('Warning! Parameter set not complete!');
end
3) Предполагается, что предупреждение должно быть выдано значением NaN в виде строки ,как изначально указано в вопросе:
if(nnz(strcmp(struct2cell(Parameter), 'NaN')))
disp('Warning! Parameter set not complete!');
end