我如何使这个for循环与函数添加新元素到表每次迭代而不是重写它们?

2次观看(过去30天)
AMC3011
AMC3011 于2021年6月3日
回答: 瓦琳卡特瓦 2021年7月13日
大家好,
希望你能帮助我这个:
我试图创建一个for循环,它通过一个批处理文件的过程(函数内部的for循环)放置一些文件。因此for循环应该在所有的文件上运行功能和一些数据创建一个表,问题是我不能找出如何让新数据添加到表的表在每个迭代中,而不是被重写。
下面的代码:
清晰的
[文件,文件夹] = UigetFile('* .xls; *。xlsx; *。CSV');
文件名= fullfile(文件夹、文件);
nbook = readtable(文件名);
d = dir('* .wcp');
num_files =高度(d);
名称=细胞(0);
为了nf = 1:num_files
fname = fullfile(d(nf).name);
名字{nf} =帧;
名称=名字。';
结尾
为了nn = 1:高度(名称)
datafile = char(名称(nn));
DataTable = Batchprocess(数据文件,NBook)
结尾
这是BatchProcess函数,我认为问题仅在于创建表的最后一行代码上:
data = import_wcp(功能);
EPSPdata =有悖于{1};
num_samp = size(epspdata);
interval = data.t_interval;
t = 0:间隔:( num_samp-1)*间隔;
t = t ' * 1000;
[〜,starti] = min(abs(t-13));
[~, endI] = min (abs (t-35));
窗口= starti:endi;
SmoothFortor = 2;
SMDATA = EPSPDATA;
numtrace = size(epspdata,2);
为了n = 1:numtrace
smData(:,n,1) = smooth(EPSPdata(:,n,1), smoothfactor);
结尾
[峰,〜] = min(smdata(窗口,:));
峰=峰。”;
peakdata =峰值;
controleq =(nbook.cado(1)-1);
cadoeq =(nbook.cado_dpcpx(1)-1);
DPCPXeq = (Nbook.CADO_DPCPX_NBQX (1) 1);
nbqxeq =(长度(data.rec_index)-1);
controldata = smdata(:,controleq);
cadodata = smdata(:,cadoeq);
DPCPXData = smData(:, DPCPXeq);
NBQXData = smData (:, NBQXeq);
[〜,startg] = min(abs(t-7));
[〜,endg] = min(abs(t-35));
windowg = startg:endg;
子图(2,4,1)
ControlRecording = plot(t(windowg),controldata(windowg,:));
ylim([ - 0.8 0.2]);
包含'时间(ms)'
ylabel.“电压(mv)”
标题('一世'
子图(2,4,2)
CADOrecording = plot(t(windowG), CADOData(windowG,:)));
ylim([ - 0.8 0.2]);
标题(“二世”
子图(2,4,3)
dpcpxrecord = plot(t(windowG), DPCPXData(windowG,:)));
ylim([ - 0.8 0.2]);
标题('III'
子图(2,4,4)
nbqxrecording = plot(t(windowg),nbqxdata(windowg,:));
ylim([ - 0.8 0.2]);
标题('IV'
plott = 0:10:10 *((length(data.rec_index)-1));
Plott = Plott'/ 60;
子图(2,4,[5,6,7,8])
timeecourseplot =分散(PlotT, PeakData);
包含'时间(分钟)'
ylabel.'第一fEPSP振幅(mv)'
XLINE([Plott(Controleq)Plott(Cadoeq)Plott(DPCPXEQ)Plott(NBQXEQ)],' - ', {'一世'“二世”'III''IV'},'lableorientation'“水平”);
DataTable = table(convertCharsToStrings(DataFile), PeakData(CONTROLeq), PeakData(CADOeq), PeakData(DPCPXeq), PeakData(NBQXeq),'variablenames', {'文档名称'“控制高峰”“CADO峰”'dpcpx peak'“NBQX峰”});
结尾

答案(1)

瓦琳卡特瓦
瓦琳卡特瓦 2021年7月13日
你好,
我相信您正在尝试在每次迭代中为您的表格进行新行,但是使用此代码您正在重新编写DataTable变量并接收用于循环的最终迭代的数据。您需要将表转换为matlab' 塑造 ',将每个迭代的数据添加到该结构中,最后将结构数组转换回表中。
您可以使用这样的内容来实现这一目标:
DataTable = []
为了nn = 1:高度(名称)
datafile = char(名称(nn));
Data = BatchProcess(数据文件,NBook);
DataTable = [DataTable Table2struct(数据)];%将数据附加到结构数组中
结尾
DataTable = Struct2table(DataTable)
数据可图 在迭代结束时将包含多行,每个行与来自for循环的每个迭代的数据相对应。
希望这个有帮助。

s manbetx 845


释放

R2020B.

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!

被某某人翻译