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

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注