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