MATLAB Answers

Check class of input variables

9 views (last 30 days)
Ledger Yu
Ledger Yu on 12 Sep 2018
Edited: Stephen on 12 Sep 2018
I have a function that requires several input variables:
function output = myFun(A,B,C,D,E,...)
% code
end
I need to check the class of those inputs and convert all "cell" to "mat" format. Of course I can do something like this:
if iscell(A)
A = cell2mat(A)
end
if iscell(B)
B = cell2mat(B)
end
if iscell(C)
C = cell2mat(C)
end
...
But how do I do that in a for loop?
  1 Comment
Stephen
Stephen on 12 Sep 2018
"But how do I do that in a for loop?"
Magically accessing variable names in a loop is one way that beginners force themselves into writing slow, complex, buggy code that is hard to debug. read this to know why:
The situation is easy to avoid with varargin and indexing.

Sign in to comment.

Answers (1)

Stephen
Stephen on 12 Sep 2018
Edited: Stephen on 12 Sep 2018
Simply using varargin:
function out = myFun(varargin)
idx = cellfun(@iscell,varargin);
varargin(idx) = cellfun(@cell2mat,varargin(idx),'uni',0);
...
end
You can then access the elements of varargin trivially using indexing.
  2 Comments
Stephen
Stephen on 12 Sep 2018
"After this, I suppose I should do something like this:"
A = varargin{1};
B = varargin{2};
C = varargin{3};
I don't suppose that, but you could if you want to. Personally I would not bother, because all of the data is trivially accessibly using indexing already.
"or is there an easier way?"
No. Read my comment to know why:

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!