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