你在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.