2016-05-18 4 views
0

私は構造体mdlを返すfitglmを使ってmatlabに統計モデルをフィットしています。後でそれらを再利用するために、多くのそのような構造をセルの配列に格納したいと思いますが、これはうまくいかないようです。ここでは、コードは次のとおりです。私は、単一のセルにこのような構造を割り当てるしようとすると、Matlabに大きい構造を格納する

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

()付き)models(index)割り当てを使用すると、右側のものは、細胞であることを前提としていので、これは動作しません。代わりに、中括弧を使用して、(任意のタイプの)右の項目をにコピーし、指定された要素のセル配列にコピーします。あなたが本当に()を使用したい場合は

models{i,1} = mdl; 

、あなたの代わりに最初のセルに、右側にに事を変換することができます。

models(i,1) = {mdl}; 

あなたは、セル配列にfitglmの出力を置くのではなく上書きされないため(スカラーセル配列を持つ)2番目の例では、エラーが発生していないことを理由は、変数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 
関連する問題