Как исправить в r: аргумент не является ни числовым, ни логическим: return 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) должен иметь положительную длину
Как исправить: ошибка при выборе неиспользуемых аргументов