我使用fitglm在matlab中拟合统计模型,返回结构mdl。我想在一个单元格数组中存储许多这样的结构,以便以后重用它们,但这似乎不起作用。这是代码:
models = cell(size(quarterList,1)-lag-1,1);
for i=1:size(quarterList,1)-lag-1
%indicesTemp = find(and(annQuarters(:,2) <= quarterList(i+11,2),annQuarters(:,2) >= quarterList(i,2)));
memberTemp = ismember(annQuarters(:,:), quarterList(i:i+lag,:));
indicesTemp = find(memberTemp(:,2));
fprintf('Perdiod: Q%i %i to Q%i %i - Nb samples: %i \n',annQuarters(i,1),annQuarters(i,2),annQuarters(i+lag,1),annQuarters(i+lag,2),size(indicesTemp,1));
[Xtemp Ytemp] = categorizeVariables(X(indicesTemp,:),Y(indicesTemp,:));
mdl = fitglm(Xtemp,Ytemp-1,'Distribution','binomial', 'Link','logit');
models(i,1) = mdl;
end
现在,当我尝试将这样的结构分配给单个单元格时,它可以工作:
temp = cell(1,1);
mdl = fitglm(Xtemp,Ytemp-1,'Distribution','binomial', 'Link','logit');
temp = mdl;
为什么单元格数组中的赋值在这种情况下不起作用?关于如何解决这个问题的任何建议?
答案 0 :(得分:0)
这不起作用,因为使用models(index)
赋值(使用()
)假设右侧的内容是一个单元格。你想要使用大括号,它会将右边(任何类型)的项目复制到指定元素的单元格数组中。
models{i,1} = mdl;
如果你真的想使用()
,你可以先将将右边的东西转换为单元格。
models(i,1) = {mdl};
你的第二个例子(带有标量单元格数组)没有导致错误的原因是因为你不将fitglm
的输出放入单元格数组,而是覆盖变量temp
以指向mdl
而不是单元格数组。
temp = cell(1,1);
% Check if temp is a cell
iscell(temp)
%// TRUE
mdl = fitglm(Xtemp,Ytemp-1,'Distribution','binomial','Link','logit');
temp = mdl;
% Check if temp is still a cell (it isn't)
iscell(temp)
%// FALSE
除此之外,您实际上可以将struct
存储在数组中。除非字段不同,否则您实际上并不需要单元格数组。
for i = 1:N
mdl(i) = fitglm(Xtemp, Ytemp - 1, 'Distribution', 'binomial', 'Link', 'logit');
end