Nested Functions Matlab App Designer
Ältere Kommentare anzeigen
Hi,
I have the following functions in Matlab App Designer:
function [volatility] = funfour(~,file_reqs, file_reqs_size, chosen_date, name, object_type)
% Function: funfour
% This function outputs the Volatility of the file as a percentage when
% compared to a chosen date
% Inputs:
% file_reqs: table/cell
% file_reqs_size: double/cell
% chosen_date: datetime
%
% Outputs:
% volatility: double/array
%
% Traceability
%
% Author: Santiago Chazaro
%
% email:
%------------- BEGIN CODE -------------
if isa(file_reqs, 'table') == 1 % Determines the amount of files being checked
vol = zeros(file_reqs_size,1); %Pre Allocation
for i = 1:file_reqs_size
vol(i) = file_reqs.LastModifiedOn(i,1) >= chosen_date; % Determines if a date is before or after the chosen date and creates a logical array where 1 = after, 0 = before
end
volatility = sum(vol)/file_reqs_size*100; % Finds the percentage of requirements that were modified after the chosen date
app.volgraphfun(volatility, name, object_type, chosen_date); %<<<<<<<<<<
else
vol{1,size(file_reqs_size,1)} = []; %Pre Allocation
volatility = zeros(1,size(file_reqs_size,1)); % Pre Allocation
for k = 1:size(file_reqs_size,1)
for y = 1:file_reqs_size(k,1)
vol{1,k}(y,1) = file_reqs{1,k}.LastModifiedOn(y,1) > chosen_date; % Determines if a date is before or after the chosen date and creates a logical array where 1 = after, 0 = before
end
volatility(1,k) = sum(vol{1,k})/file_reqs_size(k,1)*100; % Finds the percentage of requirements that were modified after the chosen date
end
app.volgraphfun(volatility, name, object_type, chosen_date); %<<<<<<<<<<
end
end
Which calls the following function inside of it:
function [] = volgraphfun(~,volatility, name, object_type, cdr)
% Function: volgraphfun
% This function plots the volatility of a file
%
% Inputs:
% volatility: double/array
% name: char/cell
% object_type: char
% cdr: datetime
%
% Outputs:
% stacked bar graph
%
% Traceability
%
% Author: Santiago Chazaro
%
% email:
%------------- BEGIN CODE -------------
if isa(name, 'char') % For single file inputs
op_vol = 100 - volatility; % Calculates nonvolatilty
yaxis = [volatility; op_vol]; % Concacates values
namecell = cellstr(name); % converts name to cell array
xaxis = categorical(namecell); % Creates categorical axis
figure('Name', name) % Defines figure
bar(xaxis, yaxis, 'stacked'); % Plots volatility as a stacked bar chart
barbase = cumsum([zeros(size(yaxis,1),1) yaxis(:, 1:end-1)],2); % Finds the cumulative sum of the y axis to determine positioning for legend
barbase = yaxis./2 + barbase; % Halfs the calculated values
for i = 1:size(yaxis,1)
text(xaxis, barbase(i), sprintf('%.01f %%', yaxis(i)), 'HorizontalAlignment', 'center'); % Places names in middle of bars
end
title(sprintf('Volatility of %s', name));
subtitle(sprintf('CDR: %s', cdr));
ylabel('Percentage');
legend(sprintf('%s objects changed after CDR', object_type), sprintf('Stable %s objects after CDR', object_type))
else % Same code as above, for multiple inputs
for ii = 1:size(name, 2)
op_vol(ii) = 100 - volatility(ii);
yaxis{1,ii} = [volatility(ii); op_vol(ii)];
namecell = cellstr(name{1,ii});
xaxis = categorical(namecell);
figure('Name', name{1,ii})
bar(xaxis, yaxis{1,ii}, 'stacked');
barbase{1,ii} = cumsum([zeros(size(yaxis{1,ii},1),1) yaxis{1,ii}(:, 1:end-1)],2);
barbase{1,ii} = yaxis{1,ii}./2 + barbase{1,ii};
for i = 1:size(yaxis{1,ii},1)
text(xaxis, barbase{1,ii}(i), sprintf('%.01f %%', yaxis{1,ii}(i)), 'HorizontalAlignment', 'center')
end
title(sprintf('Volatility of %s', name{1,ii}));
subtitle(sprintf('CDR: %s', cdr));
ylabel('Percentage');
legend(sprintf('%s objects changed after CDR', object_type), sprintf('Stable %s objects after CDR', object_type));
end
end
end
However, I keep getting the following error:
Unable to resolve the name 'app.volgraphfun'.
Error in Traceability_imbedded_functions/funfour (line 483)
app.volgraphfun(volatility, name, object_type, chosen_date);
Error in Traceability_imbedded_functions/RunButtonPushed (line 1163)
[app.volatility_B] = app.funfour(app.file_B_reqs, app.file_B_reqs_size, app.chosen_date_1, app.file_B_name, app.object_type);
Error in matlab.apps.AppBase>@(source,event)executeCallback(appdesigner.internal.service.AppManagementService.instance(),app,callback,requiresEventData,event) (line 63)
newCallback = @(source, event)executeCallback(appdesigner.internal.service.AppManagementService.instance(), ...
483 app.volgraphfun(volatility, name, object_type, chosen_date);
Is this a problem with the function referencing ?
Note: The above functions are all inside the app itself, and I'd like to keep it that way if possible.
Akzeptierte Antwort
Weitere Antworten (0)
Kategorien
Mehr zu Historical Contests finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!