Creating and Calling functions
이전 댓글 표시
Hello,
I want to create a function that will take a data set, extract desired columns/rows , take their average and compute the difference.
I am new to this and I am not sure why I am getting errors, this is what I have so far. Does anyone know where I went wrong? I thought the function maybe should be the last line of my code, but that did not work either.
Also, as I have 20+ data sets I want to do this analysis on, can I do it on the same script or do I need a new different file?
Thank you!
%Create a functions that computes the averages of plateaus and difference between them.
function
data=readmatrix(x);
%extract desired rows and columns
x1=data(13911:111401,1);
y1=data(13911:111401,2);
x2=data(216399:1000015,1);
y2=data(216399:1000015,2);
Mx1= mean(x1,'all');
My1 = mean(y1,'all');
Mx2= mean(x2,'all');
My2 = mean(y2,'all');
mvd= (My2- My1);
end
답변 (1개)
Walter Roberson
2021년 5월 26일
function
data=readmatrix(x);
That needs to be on a single line.
Mx1= mean(x1,'all');
Using 'all' is not wrong, but it is unnecessary, as you are working with vectors.
Note that you compute the x means but you do not do anything with them.
Note that you do not return mvd, only data.
댓글 수: 17
Macarena Santillan
2021년 5월 26일
Walter Roberson
2021년 5월 26일
I am new to this and I am not sure why I am getting errors
You did not post a copy of the errors, so I had to analyze the syntax you gave. Your lines
function
data=readmatrix(x);
are syntactically wrong, and would need to be
function data=readmatrix(x);
This would overshadow the MATLAB function named "readmatrix", and would lead to problems slightly further in your code, as your code expects "data" to already exist.
Perhaps what you needed was instead
function NameOfYourFunctionGoesHere
data=readmatrix(x);
Macarena Santillan
2021년 5월 27일
Steven Lord
2021년 5월 27일
Do not separate the function keyword (line 3) and the rest of the function declaration (line 5). Delete line 5 and make the following line 3:
function data=readmatrix(x)
Walter Roberson
2021년 5월 27일
No, leave line 5 but change line 3 to
function computingmvdifference
Macarena Santillan
2021년 5월 27일
Walter Roberson
2021년 5월 27일
function computingmvdifference(x)
and you would invoke with something like
computingmvdifference('Sepsis201907140815.xlsx')
You would replace 'Sepsis201907140815.xlsx' with the name of the file you wanted to read.
Macarena Santillan
2021년 5월 27일
Macarena Santillan
2021년 5월 27일
Walter Roberson
2021년 5월 27일
편집: Walter Roberson
2021년 5월 27일
dinfo = dir('tek*.csv');
filenames = {dinfo.name};
for K = 1 : length(filenames)
computingmvdifference(filenames{K});
end
Macarena Santillan
2021년 5월 27일
Walter Roberson
2021년 5월 27일
When you pass a pattern into dir(), the output is a struct array with information about each file it found that matches the pattern. In this particular case your example shows tek0023.csv so I guessed that you want to process all files whose name begin with 'tek' and have a csv extension, so pattern 'tek*.csv' is appropriate.
The struct array that is returned by dir() has a field named 'name' for each file. {dinfo.name} uses structure expansion, and is equivalent to having written {dinfo(1).name, dinfo(2).name, dinfo(3).name and so on to dinfo(end).name} for however many files were found. So afterwards filenames will be a cell array of character vectors, each of which is the name of one file that was found.
After that you just loop taking one file name at a time and passing it to computingvmdifference() to process.
Macarena Santillan
2021년 5월 27일
Walter Roberson
2021년 5월 28일
You loop K according to the number of files, and you extract the current file and pass it to the function. I already posted the code.
Macarena Santillan
2021년 6월 7일
Walter Roberson
2021년 6월 7일
dinfo = dir('tek*.csv');
filenames = {dinfo.name};
num_files = length(filenames);
results = zeros(num_files,5);
for K = 1 : length(filenames)
results(K,:) = computingmvdifference(filenames{K});
end
%Create a functions that computes the averages of plateaus and difference between them.
function results = computingmvdifference(x)
data = readmatrix(x);
%extract desired rows and columns
x1=data(13911:111401,1);
y1=data(13911:111401,2);
x2=data(216399:1000015,1);
y2=data(216399:1000015,2);
Mx1 = mean(x1,'all');
My1 = mean(y1,'all');
Mx2= mean(x2,'all');
My2 = mean(y2,'all');
mvd = (My2- My1);
results = [mvd, Mx1, My1, Mx2, My2];
end
After the code finishes, then
results(:,1) -- will be all of the mvd values
results(:,2) -- will be all of the Mx1 values
results(:,3) -- will be all of the My1 values
results(:,4) -- will be all of the Mx2 values
results(:,5) -- will be all of the My2 values
Macarena Santillan
2021년 6월 7일
카테고리
도움말 센터 및 File Exchange에서 Large Files and Big Data에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



