Error Attempt to execute SCRIPT join_function as a function:

I'm trying to merge 100 tables from a cell array. I'm trying to use loop that calls the function 'join_function' but I get this error. Can anyone help?
join_function:
c = outerjoin(data{1,1},data{1,2},'Keys','time','MergeKeys',true);
loop:
numfiles = 100;
demand = table(1, numfiles);
for j = 1:numfiles
demand_file = sprintf('data{1,%d}', j);
demand{k} = join_function(demand_file);
end
error message from commanf window:
Attempt to execute SCRIPT join_function as a function:
C:\Users\Mark\Downloads\join_function.m
Error in testjoinall (line 14)
demand{k} = join_function(demand_file);

 Accepted Answer

Jan
Jan on 30 Jan 2018
Edited: Jan on 30 Jan 2018
The error message is clear: join_function.m is a script file and then it does not accept input arguments. Only functions do this. See https://www.mathworks.com/help/matlab/matlab_prog/scripts-and-functions.html and https://www.mathworks.com/help/matlab/learn_matlab/scripts-and-functions.html .
The code has more problems. sprintf('data{1,%d}', j) creates strings, char vectors to be exact. But in the joining you try to access the contents of an data array. This is something completely different. 'data{1,2}' is a char vector, but does not carry any information about the array called "data".
It is strange, that you create 'data{1,1}' in the loop, but try to access the two elements of the cell array data{1,1} and data{1,2} inside the outerjoin function.
I guess, you want something like this:
numfiles = 100;
demand = table();
for j = 1:numfiles
demand = outerjoin(demand, data{1, j}, 'Keys', 'time', 'MergeKeys', true);
end

5 Comments

Thanks, I've tried this but I get an error saying "unrecognized varaible name 'time'." Do you know how to over come this?
outerjoin is a function that applies to table objects and timetable objects. When you specify 'Keys', 'time', that tells MATLAB that it should look inside the table for a column named 'time' and use that column to do the join. The message you are getting is because your table does not contain 'time'
But all the tables have 'time'.
Jan's suggested code
demand = table()
created a table with no variables. You would need to omit that line
You can omit the initialization with an empty table, but use the first table and start the concatenation at the 2nd one:
numfiles = 100;
demand = data{1, 1};
for j = 2:numfiles
demand = outerjoin(demand, data{1, j}, 'Keys', 'time', 'MergeKeys', true);
end

Sign in to comment.

More Answers (0)

Tags

Asked:

on 30 Jan 2018

Edited:

Jan
on 31 Jan 2018

Community Treasure Hunt

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

Start Hunting!