m-files as function inputs in for loop
    7 views (last 30 days)
  
       Show older comments
    
Hi everyone!
I have a function.m that I run with an input.m like this:
function input
I'm trying to process a Monte Carlo Samples in this function. So I have a lot of m-files inputs: input_1.m, input_2.m, ..., input_n.m.
To process everything I set up this for loop:
for i = 1:n
    filename = sprintf('%s_%d', 'input', i);
    function filename
end
But the function doesn't recognize the string to run. The errors are:
Error using pdatvp_seq (line 49)
Data file not found: filename.
Error in run_test (line 4)
    function filename
Someone knows how to help me to do the function recognize the string to run?
4 Comments
  Adam
      
      
 on 6 Feb 2018
				
      Edited: Adam
      
      
 on 6 Feb 2018
  
			What does progcoll look like? I'm not familiar with trying to just pass one .m file in after another like that. Usually you would pass in arguments in parentheses. Also, trying to simplify your question is good, but doing so by replacing real function names with 'function' is very confusing since it is a fundamental key word.
Accepted Answer
  Stephen23
      
      
 on 6 Feb 2018
        
      Edited: Stephen23
      
      
 on 6 Feb 2018
  
      One obvious problem is that you are using command syntax whereas you need to be using function syntax (note the parentheses!):
for k = 1:n
    fname = sprintf('input_%d.m', k);
    progcoll(fname)
end
Your original code did not work because with command syntax all trailing strings are interpreted literally, so the trailing filename is not interpreted as a variable containing a name, but instead simply as the string of characters 'filename'. I would recommend that you always use function syntax every time that you call a function. Read about the difference here:
It states "When a function input is a variable, you must use function syntax to pass the value to the function. Command syntax always passes inputs as literal text and cannot pass variable values"
3 Comments
More Answers (1)
  Kai Domhardt
      
 on 6 Feb 2018
        As a general description, you have a function you want to call in an .m file:
.m
function out = target_fun(in)
    ...
end
main.m
fun_call = [fun_name, '(' fun_param ')'];
result = eval(fun_call);
For your use you can apply it like this:
for i = 1:n
    filename = sprintf('%s_%d', 'input', i);
    eval(filename)
end
See Also
Categories
				Find more on Monte Carlo 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!




