Check class of input variables

7 views (last 30 days)
Ledger Yu
Ledger Yu on 12 Sep 2018
Edited: Stephen23 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
Stephen23
Stephen23 on 12 Sep 2018
Edited: Stephen23 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)

Stephen23
Stephen23 on 12 Sep 2018
Edited: Stephen23 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
Ledger Yu
Ledger Yu on 12 Sep 2018
After this, I suppose I should do something like this:
A = varargin{1};
B = varargin{2};
C = varargin{3};
...
or is there an easier way?
Stephen23
Stephen23 on 12 Sep 2018
Edited: Stephen23 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.

Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!