2016-12-12 12 views
0

プール内でゲノムが生存している連続ラウンドの最大数を数えるスクリプトを作成しようとしています。次のエラーが得られます(keys(livedlong)またはvalues(livedlong)は、というかむしろ呼び出し):matlabエラー: 'subsindex'関数が 'containers.Map'クラスの値に定義されていません

dd = dir('*.csv'); 

fileNames = {dd.name}; 

data = cell(numel(fileNames),2); 
data(:,1) = regexprep(fileNames, '.csv',''); 

for i = 1:numel(fileNames)  
    data{i,2} = dlmread(fileNames{i}); 
end 

cc = distinguishable_colors(numel(fileNames));    % get better colormap 

livedlong = containers.Map;         % contains all the streaks 

for k = 1:numel(fileNames) 

    strat = data{k,1}(10:end); % get strategy name 
    XY = data{k,2};   % get data 
    X = XY(:,1);    % get rounds 
    Y = XY(:,2);    % get #tiles 
    streak = 1;    % set streak counter to 1 
    longestStreak = streak; % set longestStreak to 1   


    %%% Calculate the streaks! 
    for l = 1:(numel(X)-1) 
     if ((X(l)+1) == X(l+1)) 
      streak = streak + 1; 
      if (streak > longestStreak) 
       longestStreak = streak; 
      end 
     else 
      streak = 1; 
     end 
    end 

    livedlong(strat)=longestStreak;    % save the streaks 

end 

k = keys(livedlong); 
v = values(livedlong); 
for i = 1:length(livedlong) 
    plot(k{i}, v{i}, 'o', 'color', cc(i,:)) 
end 

しかし、最後の5行は:私は、これは以下のコードを使用して行うFunction 'subsindex' is not defined for values of class 'containers.Map'.と私は理由はわかりません。私はしばらく前にコマンドウィンドウのマップ上のコマンドを使用することができましたが、今はそれもできません。

+0

機能している[MCVE]と*実際のエラーメッセージを提供していれば、あなたの言い換えに役立つでしょう。あなたはおそらく、 'keys'や' values'のどこかにオーバーロードされているか、 'k'や' v'が期待しているデータ型ではありません。 – excaza

答えて

0

あなたは変数がワークスペース内keysおよび/またはvaluesという名前で、MATLABは、(subsindexを呼び出すことによって)指標としてあなたcontainer.Mapインスタンスを使用しようとして失敗している必要があります。

いずれかのこれらの変数を削除します。

clear keys values 

それともこれはあなたのワークスペースので、機能ではなく、スクリプトを使用するには、別の良い理由で、これらの方法に

k = livedlong.keys(); 
v = livedlong.values(); 

を呼び出すためのドット表記を使用します現在の機能は事前に実行されたものによって汚染されていません。

+0

matlabを再起動すると問題が解決したので、一度それらを上書きした場合があります。 – GLaDER

関連する問題