Как исправить в R: аргумент не является числовым или логическим: возвращается na


Одно предупреждение, с которым вы можете столкнуться в R:

Warning message:
In mean.default(df) : argument is not numeric or logical: returning NA

Это предупреждение появляется, когда вы пытаетесь вычислить среднее значение какого-либо объекта в R, который не является числовым или логическим.

В этом руководстве рассказывается, как именно обрабатывать это предупреждение на практике.

Как воспроизвести предупреждение

Предположим, мы создаем следующий фрейм данных в R:

#create data frame
df <- data.frame(team=c('A', 'B', 'C', 'D', 'E'),
 points=c(99, 90, 86, 88, 95),
 assists=c(33, 28, 31, 39, 34),
 rebounds=c(30, 28, 24, 24, 28))

#view data frame
df

 team points assists rebounds
1 A 99 33 30
2 B 90 28 28
3 C 86 31 24
4 D 88 39 24
5 E 95 34 28

Если мы попытаемся вычислить среднее значение столбца символов или попытаемся вычислить среднее значение всего фрейма данных, мы получим предупреждение:

#attempt to calculate mean of character column
mean(df$team)

Warning message:
In mean.default(df$team) : argument is not numeric or logical: returning NA

#attempt to calculate mean of entire data frame
mean(df)

Warning message:
In mean.default(df) : argument is not numeric or logical: returning NA

Функция mean() принимает в качестве аргумента только числовой вектор, что объясняет, почему мы получаем предупреждение в обоих сценариях.

Как справиться с предупреждением

Чтобы справиться с этим предупреждением, используйте функцию mean() только с числовыми векторами.

Например, мы могли бы вычислить среднее значение столбца точек, поскольку оно числовое:

#calculate mean of points column
mean(df$points)

[1] 91.6

Или мы могли бы использовать функцию sapply() для вычисления среднего значения каждого столбца во фрейме данных:

#calculate mean of every column in data frame
sapply(df, mean, 2)

 team points assists rebounds 
 NA 90 33 28 

Warning message:
In mean.default(X[[i]], ...) :
 argument is not numeric or logical: returning NA

Мы можем вычислить среднее значение каждого числового столбца, но по-прежнему получаем предупреждающее сообщение, так как мы попытались вычислить среднее значение столбца символов «команда».

Чтобы полностью избежать этого предупреждения, мы могли бы использовать функцию sapply() только с тремя числовыми столбцами:

#calculate mean of each numeric column
sapply(df[c('points', 'assists', 'rebounds')], mean, 2)
 points assists rebounds 
 90 33 28

Обратите внимание, что среднее значение каждого числового столбца успешно показано, и мы не получаем предупреждающего сообщения.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в R:

Как исправить: условие имеет длину > 1 и будет использоваться только первый элемент
Как исправить: нечисловой аргумент бинарного оператора
Как исправить: dim(X) должен иметь положительную длину
Как исправить: ошибка при выборе неиспользуемых аргументов

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