Error Using a loop: Conversion to double from cell is not possible.

3 ビュー (過去 30 日間)
Waqar Ali Memon
Waqar Ali Memon 2019 年 7 月 10 日
コメント済み: Peter Jarosi 2019 年 7 月 10 日
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 件のコメント
Waqar Ali Memon
Waqar Ali Memon 2019 年 7 月 10 日
Hello Guillaume,
Since, loop range is from 1 to 10 and once the required data is executed (till Project = Project(11:end,1:end); ). I want to create a new variable and save this output in that. It means if w = 1 is executed: I should get new variable with name Proj1 and should have the output of Project; Once it is saved. It should be done for 2,3,...10. I hope, you understand :-)
Thank you for your time.
Stephen23
Stephen23 2019 年 7 月 10 日
"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:
In contrast indexing is simple, neat, easy to debug, and very efficient. You should use indexing, just like madhan ravi showed in their answer.

サインインしてコメントする。

採用された回答

Peter Jarosi
Peter Jarosi 2019 年 7 月 10 日
編集済み: Peter Jarosi 2019 年 7 月 10 日
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 件のコメント
madhan ravi
madhan ravi 2019 年 7 月 10 日
編集済み: madhan ravi 2019 年 7 月 10 日
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
Peter Jarosi 2019 年 7 月 10 日
編集済み: Peter Jarosi 2019 年 7 月 10 日
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. :)

サインインしてコメントする。

その他の回答 (2 件)

madhan ravi
madhan ravi 2019 年 7 月 10 日
Proj = cell(10,1); % outside loop
Proj{w} = ... % inside loop , leave the rest unchanged
  3 件のコメント
Stephen23
Stephen23 2019 年 7 月 10 日
+1 simple and efficient MATLAB solution.

サインインしてコメントする。


Waqar Ali Memon
Waqar Ali Memon 2019 年 7 月 10 日
Thank you so much madhan ravi, Guillaume and Stephen Cobeldick. I wanted a loop and the code from Peter Jarosi did same. Though, it won't be proper solution but it helped me :-)
Thank you everyone :-)
Regards,
Waqar Ali Memon
  1 件のコメント
Peter Jarosi
Peter Jarosi 2019 年 7 月 10 日
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!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeWhos についてさらに検索

製品


リリース

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by