Cell contents assignment to a non-cell array object
    2 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
I am getting the above mentioned error while going through multiple loops. I really don't know how to explain the problem, But i will try my best
code:
function this = tempaddfilt(this,varargin)
            fc = linspace(1,200,(200/0.5));
            main = struct('seg_err',{},'sig_err',{},'filt_err',{},'fc',{});
            for a = 1:length(fc) % fc
                q = 0;
                w = 0
                for i = 1:length(this.segments) % total number signal
                    for k = 1:length(this.segments{i}) % total number of segments
                         filt_sig = eval(this.segments{i}(k).signal,this.segments{i}(k).signal(1)); % apply filter to the ith singal and kth segemnt
                        filt_sig = filt_sig';
                        main{i}(k).seg_err(a) = std(filt_sig-this.segments{i}(k).ref); % calculate the standard divitation of the filtered signal and previously calculated signal.
                        q = q+main{i}(k).seg_err(a); add all the error of the segments for the same FC
                      end
                      main{i}(1).sig_err(a) = q; % assign the sum of all error of the all segemnts of the same signal
                      w = w+main{i}(1).sig_err(a); % add all the error of the signals
                  end
                  main.filt_err = w; % assign the sum of all error of the all signals
              end
              this.error_norm = [this.error_norm ;main];
          end
      end
Basically I have 3 loops, 1st loop is for fc, 2nd loop is for signal and 3rd loop is for segemnts of the singal. Program works fine when fc = 1.
But when fc is 2, i get the following error:
Cell contents assignment to a non-cell array object.
in the line:
main{i}(k).seg_err(a) = std(filt_sig-this.segments{i}(k).ref);
that is when i =1 , k=1 ,a = 2
any help will be appriciated
1 comentario
  Guillaume
      
      
 el 27 de Jul. de 2016
				Note: other than confusion between cells and structures that others have answered to, there is a very suspicious line in your code:
filt_sig = eval(something, somethingelse)
Using eval is extremely discouraged. Furthermore, eval only takes one argument and will simply ignore the second.
Respuestas (2)
  Image Analyst
      
      
 el 27 de Jul. de 2016
        You declared main as a struct. Structs do not use braces {}. To fix, convert braces to parentheses (). Or else declare main as a cell array with the cell function rather than the struct function.
  Adam
      
      
 el 27 de Jul. de 2016
        main is declared as a struct so yes, you would get that error if you are trying to assign to it as though it is a cell array which is what
main{i}
will do. I assume what you want is an array of structs which does not need to be a cell array if the structs all have the same fields.
4 comentarios
  Stephen23
      
      
 el 27 de Jul. de 2016
				Which is why it would be much much simpler to use a non-scalar structure instead, which would avoid all of that confusion:
main(i,k).seg_err(a) = ...
Ver también
Categorías
				Más información sobre Structures en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!