Check if a variable exists in the workspace, within a function

99 views (last 30 days)
Hi,
I have a function which needs to check if a variable ('error_N') exists in the work space. If it does not exist, the function must create it.
In the following example, the function does not see the variable 'error_N' from the workspace. I tried to solve it by declaring it as a global variable. However, in the case the variable does not exist in the Workspace, Matlab creates an EMPTY variable called 'error_N' when reading "global error_N", so the function cannot create it with the value that I would like it to get.
Do you have any suggestions?
Thanks!
function output = function_example(input)
% global error_N ???????
E_1 = exist('error_N','var');
if E_1 ==1
else
error_N = 0.001;
end
output = function2(input);
error = output/N;
while error>error_N
blablabla
output....blablabla
end
end
  4 Comments
Stephen23
Stephen23 on 29 Mar 2019
Introspective programming (such as checking for the existence of variables) is slow and leads to complex code. The MATLAB documentation recommends to avoid doing this:
Better to simply use nested functions, known variable names, and explicit logic that keeps track of what data you have.
Walter Roberson
Walter Roberson on 29 Mar 2019
The path you have defined so far is:
if variable exists in caller
do nothing in current workspace
else
create variable in current workspace
end
but in the path you defined, you do not pull out the variable from the caller.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 29 Mar 2019
Edited: Walter Roberson on 29 Mar 2019
if evalin('caller', 'exist(''error_N'',''var'')')
error_N = evalin('caller', 'error_N');
else
error_N = 0.001;
end
This would not be recommended. Better would be something like,
function output = function_example(x, error_N)
if ~exist('error_N', 'var') || isempty(error_N)
error_N = 0.001;
end
end
That is, the user passes error_N to you if the user wants something other than the default.
  4 Comments
Vogel
Vogel on 1 Apr 2019
Thank you for your advice :)
I will try to keep that in mind!
Hisham Abbassy
Hisham Abbassy on 12 Dec 2019
I'm trying to use it for GUI and it doesn't read the variable in the loaded mat file.
I also tried to use VarLoad but it doesn't work because I get error when the variable doesn't exist in my mat file.
Do you have an idea how to solve that?

Sign in to comment.

More Answers (0)

Categories

Find more on Debugging and Analysis in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!