如何在R中修复:参数不是数字或逻辑的:返回na

2,360 阅读1分钟

你在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)必须有一个正的长度
如何修复:选择未使用参数的错误

The postHow to Fix in R: argument is not numeric or logical: returning naappeared first onStatology.