r - 如何解释此错误消息 : (list) object cannot be coerced to type 'double'

标签 r dataframe dplyr

我有一个表:numTable,如下所示: enter image description here

现在我想找到每一列的异常值。请参阅下面我的代码:

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/

相关文章:

python - 具有字符串列到整数列表列的数据框

python - Dask 2.1.0, key 错误 : 'Column not found: 0'

R dplyr : Get index of column by its name

r - 排除特定行下方的所有记录

r - 绘制密度差异语义数据集

r - 计算一列中的百分比变化,从第一年到去年

r - 如果用 R 所有值都为 0,则用 0 填充缺失

r - 有条件地复制数据框中的行

c - 如何将 R 函数包装为 C 库

r - 在 R 中的逐步回归中结合交叉验证