How to use if command?

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 个评论

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

0 个投票

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 个评论

mask = 30 < X.ColumnA & X.ColumnA < 90;
X.ColumnB(mask) = X.ColumnA(mask);
X.ColumnB(~mask) = X.ColumnC(~mask);
This is easier than a loop. Thank you!

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Elementary Math 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by