Error Using a loop: Conversion to double from cell is not possible.
    3 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Waqar Ali Memon
      
 el 10 de Jul. de 2019
  
    
    
    
    
    Comentada: Peter Jarosi
      
 el 10 de Jul. de 2019
            Hello everyone,
On executing following code:
for w = 1:10
PN = PName{w};
CS = CSize{w};
Project = [PN CS];
Project = sortrows(Project,1);
Project = Project(11:end,1:end);
Proj(w) = Project;
end
I am getting error: Conversion to double from cell is not possible..
Code is running well till Project = Project(11:end,1:end);
Size of Project is: 4227x2 cell.
Error is while assigning a values to a new variable using a loop at Proj(w) = Project;
Any help would be appreciated :-)
Regard,s
Waqar Ali
3 comentarios
  Stephen23
      
      
 el 10 de Jul. de 2019
				"I want to create a new variable ... I should get new variable with name Proj1..."
Dynamically accessing variable names is one way that beginners force themselves into writing slow, complex, obfuscated, buggy code that is hard to debug. Read this to know why:
https://www.mathworks.com/matlabcentral/answers/304528-tutorial-why-variables-should-not-be-named-dynamically-eval
In contrast indexing is simple, neat, easy to debug, and very efficient. You should use indexing, just like madhan ravi showed in their answer.
Respuesta aceptada
  Peter Jarosi
      
 el 10 de Jul. de 2019
        
      Editada: Peter Jarosi
      
 el 10 de Jul. de 2019
  
      Perhaps what you need is struct. Try the following:
s = struct();
for w = 1:10
PN = PName{w};
CS = CSize{w};
Project = [PN CS];
Project = sortrows(Project,1);
Project = Project(11:end,1:end);
FieldName = strcat('Proj', num2str(w));
s.(FieldName) = cell2mat(Project);
end
You will get your 10 "variables" within structure s. You can refer them as s.Proj1, s.Proj2, etc.
Please let me know if it works for you.
7 comentarios
  madhan ravi
      
      
 el 10 de Jul. de 2019
				
      Editada: madhan ravi
      
      
 el 10 de Jul. de 2019
  
			Well it was mentioned nowhere whatsoever by the OP. https://in.mathworks.com/matlabcentral/answers/471071-error-using-a-loop-conversion-to-double-from-cell-is-not-possible#comment_723218 - in case if you had missed Guillaume’s comment
  Peter Jarosi
      
 el 10 de Jul. de 2019
				
      Editada: Peter Jarosi
      
 el 10 de Jul. de 2019
  
			madhan ravi : I read Guillaume 's comments carefully (again). I didn't find what I missed but I found the best part of it: "Sometimes, the best answer is: you don't actually want to do that." I really like it. :) 
Más respuestas (2)
  madhan ravi
      
      
 el 10 de Jul. de 2019
        Proj = cell(10,1); % outside loop
Proj{w} = ... % inside loop , leave the rest unchanged
3 comentarios
  madhan ravi
      
      
 el 10 de Jul. de 2019
				See https://in.mathworks.com/matlabcentral/answers/304528-tutorial-why-variables-should-not-be-named-dynamically-eval why it's a terrible terrible idea 
  Waqar Ali Memon
      
 el 10 de Jul. de 2019
        1 comentario
  Peter Jarosi
      
 el 10 de Jul. de 2019
				Waqar Ali Memon : You're very welcome!
I totally agree with programmer gurus madhan ravi, Guillaume , and Stephen Cobeldick. It is not recommended using dinamically changed variable names, and string operations instead of numbers, especially when we develope big applications. I appreciate their comments. 
But sometimes we have to break rules, we need ugly tricks in order to solve our small problems quickly. :-)
Good luck!
Ver también
Categorías
				Más información sobre Matrix Indexing 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!




