Fix in R: argument is not numeric or logical: returning na?

This is an error message that appears when trying to run a command in R programming language. It means that one of the arguments used is neither numeric nor logical, so the command can not run properly and is returning an NA value as a result.


One warning you may encounter in R is:

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

This warning occurs when you attempt to calculate the mean of some object in R that is not numerical or logical.

This tutorial shares exactly how to handle this warning in practice.

How to Reproduce the Warning

Suppose we create the following data frame in 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

If we attempt to calculate the mean of a character column or if we attempt to calculate the mean of the entire data frame, we’ll receive a warning:

#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

The mean() function only takes a numeric vector as an argument, which explains why we receive a warning in both scenarios.

How to Handle the Warning

The way to handle this warning is to only use the mean() function with numeric vectors.

For example, we could calculate the mean of the points column since it’s numeric:

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

[1] 91.6

Or we could use the sapply() function to calculate the mean of every column in the data frame:

#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

We’re able to calculate the mean of each numeric column, but still receive a warning message since we attempted to calculate the mean of the ‘team’ character column.

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

Notice that the mean of each numeric column is successfully shown and we receive no warning message.

The following tutorials explain how to fix other common errors in R:

x