Одна ошибка, с которой вы можете столкнуться в R:
Warning message:
In if (x > 1) { :
the condition has length > 1 and only the first element will be used
Эта ошибка возникает, когда вы пытаетесь использовать функцию if() для проверки некоторого условия, но передаете вектор в функцию if() вместо отдельных элементов.
В этом руководстве рассказывается, как именно исправить эту ошибку.
Как воспроизвести ошибку
Предположим, у нас есть следующий вектор в R:
#define data
x <- c(2, 3, 1, 1, 5, 7)
Теперь предположим, что мы пытаемся использовать функцию if() , чтобы проверить, больше ли каждое значение в векторе x 1, а затем умножить эти значения на 2:
#if value in vector x is greater than 1, multiply it by 2
if (x>1) {
x\*2
}
Warning message:
In if (x > 1) { :
the condition has length > 1 and only the first element will be used
Мы получаем предупреждающее сообщение, потому что мы передали вектор оператору if() .
Оператор if() может одновременно проверять только один элемент вектора, но с помощью этого кода мы попытались проверить каждый элемент вектора одновременно.
Как исправить ошибку
Самый простой способ исправить эту ошибку — использовать вместо нее функцию ifelse() :
#if value in vector x is greater than 1, multiply it by 2
ifelse(x>1, x\*2, x)
[1] 4 6 1 1 10 14
По умолчанию функция ifelse() проверяет каждый элемент вектора по одному. Это позволяет нам избежать ошибки, с которой мы столкнулись ранее.
Вот как функция ifelse() создает выходные значения:
- Первый элемент (2) был больше 1, поэтому мы умножили его на 2, чтобы получить 2*2 = 4 .
- Второй элемент (3) был больше 1, поэтому мы умножили его на 2, чтобы получить 3*2 = 6 .
- Третий элемент (1) был не больше 1, поэтому мы оставили его как есть: 1
- Четвертый элемент (1) был не больше 1, поэтому мы оставили его как есть: 1
И так далее.
Связанный: Как написать вложенный цикл for в R
Дополнительные ресурсы
В следующих руководствах объясняется, как устранять другие распространенные ошибки в R:
Как исправить в R: NA, представленные Coercion
Как исправить в R: dim(X) должен иметь положительную длину
Как исправить в R: имена не совпадают с предыдущими именами
Как исправить в R: более длинная длина объекта не кратна более короткой длине объекта
Как исправить в R: контрасты могут применяться только к факторам с 2 или более уровнями