Как исправить в 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 или более уровнями

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.