Multiple dispatch problem when trying to call the feval function with a LinearModel as an argument.

5 次查看(过去 30 天)
I set up a workflow where I am using feval to call functions programmatically and ran into a major stumbling block with one particular function call. I've isolated the problem below and explain what I think is happening.
x = 200;
[y_mean, y_sigma, y_int] = lin_model_predict(model, x, vars, params); % works fine
assert(round(y_mean, 4) == 139.7200);
assert(isequaln(y_sigma, nan));
assert(isequal(round(y_int, 4), [137.5938 141.8462]));
% Test again using feval
f_name = "lin_model_predict"; % this will later be set programatically
[y_mean, y_sigma, y_int] = feval(f_name, model, x, vars, params); % raises error
The error raised is:
Error using classreg.regr/CompactPredictor/feval
Too many output arguments.
Error in test_lin_models (line 46)
[y_mean, y_sigma, y_int] = feval(f_name, model, x, vars, params);
So instead of calling the normal feval function, it seems to be calling the feval method of CompactPredictor class. From the documentation in /Applications/MATLAB_R2021b.app/toolbox/stats/classreg/+classreg/+regr/CompactPredictor.m:
function yPred = feval(model,varargin)
%FEVAL Evaluate model as a function
% YPRED = FEVAL(M,X1,X2,...Xp) computes an array YPRED of predicted
% values from the regression model M using predictor values X1, X2, ...,
% Xp, where P is the number of predictors in M. Each X argument must be
% the same size, and must have the same type as the corresponding
% predictor variable. The size of the YPRED output is the same as the
% common size of the X inputs.
I guess this is some kind of multiple dispatch problem. How can I avoid this? My code works for other functions. I think it is only because my model variable is an instance of LinearModel. Is there a way to specifically call the main feval function, built-in (/Applications/MATLAB_R2021b.app/toolbox/matlab/lang/feval)?

采纳的回答

Bill Tubbs
Bill Tubbs 2023-2-24
There are some good suggested solutions to this from Cris Luengo on this parallel stackoverflow post:

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Install Products 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by