Как исправить в R: условие имеет длину > 1 и будет использоваться только первый элемент


Одна ошибка, с которой вы можете столкнуться в 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 или более уровнями