How to use if command?

1 次查看(过去 30 天)
Iris Li
Iris Li 2018-5-21
评论: Iris Li 2018-5-21
Say I have a table X = (columnA, columnB, columnC) What is wrong with the following command? The result is always columnB = columnA no matter what condition and which line. There are numbers in columnA smaller than 30 or larger than 90 just so you know. Thank you in advance!!
for i = 1:numel(columnA)
if 30 < columnA(i) < 90
columnB(i) = columnA(i);
else
columnB(i) = columnC(i);
end
end
end
  1 个评论
Stephen23
Stephen23 2018-5-21
The syntax you use does not do what you think it does. You will need to use
A<X && X<B
The syntax that you used is equivalent to this:
(A<X)<B
You can learn why by reading the MATLAB documentation:

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2018-5-21
30 < columnA(i) < 90 means the same as ((30 < columnA(i)) < 90) . The first part results in 0 (false) or 1 (true), and that 0 or 1 is then compared to 90 and since both are < 90, the result of the test is always true.
MATLAB does not have any range tests of the form A < x < B , with the exception that such ranges are sometimes recognized in some MATLAB versions but only in calls to piecewise()
  2 个评论
Walter Roberson
Walter Roberson 2018-5-21
mask = 30 < X.ColumnA & X.ColumnA < 90;
X.ColumnB(mask) = X.ColumnA(mask);
X.ColumnB(~mask) = X.ColumnC(~mask);
Iris Li
Iris Li 2018-5-21
This is easier than a loop. Thank you!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by