现在我想找到每一列的异常值。请参阅下面我的代码:
for (i in names(numTable)) {
#calculate mean and std for each column
meanValue <- mean(numTable[,i], na.rm=TRUE)
stdValue<-sd(numTable[,i],na.rm=TRUE)
#Sum up number of outliers for each column
print(paste("there are",sum(abs(numTable[,i]-meanValue)>3*stdValue,na.rm =
TRUE),"outliers in the column",i))
}
但我收到错误消息:
Error in is.data.frame(x) : (list) object cannot be coerced to type 'double'
我通过添加 numTable<-as.data.frame(numTable)
解决了这个问题一开始。
您能告诉我为什么我必须添加这一行才能使我的代码正常工作吗?它与 tbl 和 data.frame 之间的差异有关系吗?
谢谢。
最佳答案
方括号索引 data.frames
中有一个隐藏参数,称为 drop
,默认为 TRUE
,表示是否索引一个列,尝试将结果简化为向量。请参阅?'['
。
然而,Hadley Wickham 认为这是不可预测的行为,因此 tbl
强制执行 drop = FALSE
。
如果您想继续使用 tbl
并避免转换为 data.frame
。您可以使用 dplyr::pull 来提取单个列作为向量。即:
is.vector(data.frame(a = 1:10, b = letters[1:10])[, 1])
#> [1] TRUE
is.vector(data.frame(a = 1:10, b = letters[1:10])[, 1, drop = FALSE])
#> [1] FALSE
is.vector(dplyr::tibble(a = 1:10, b = letters[1:10])[, 1])
#> [1] FALSE
is.vector(dplyr::pull(dplyr::tibble(a = 1:10, b = letters[1:10]), 1))
#> [1] TRUE
关于r - 如何解释此错误消息 : (list) object cannot be coerced to type 'double' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47582811/