【问题标题】:Why am I getting Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric为什么我在 colMeans(x, na.rm = TRUE) 中出现错误:'x' 必须是数字
【发布时间】:2020-06-18 18:43:32
【问题描述】:

我的代码如下:

my_filtered_data <- my_data[, colSums(my_data != 0) >= 300]

set.seed(123)
data1.csv <- my_filtered_data[sample(nrow(my_filtered_data), 200), ]
data2.csv <- data.frame(data1.csv)
data3.csv <- scale(data2.csv, center = TRUE) # Gives error.

colMeans(x, na.rm = TRUE) 中的错误:“x”必须是数字

谁能解释我为什么会收到这个错误?

【问题讨论】:

  • sapply(my_data, class)
  • 在哪个命令之后出现错误?当你的对象都不是csv 文件时,你为什么要调用你的对象.csv?这只会造成混乱。

标签: r


【解决方案1】:

评论有点长,可能会或可能不会回答问题。但我认为这可能是 OP 数据集的问题之一。

您使用了 data.frame 命令,现在 data.frame 默认包含一个参数stringsAsFactors = TRUE,这可能是将您的一列转换为因子,这就是您收到此错误的原因,一种避免它的方法在代码顶部使用 options(stringsAsFactors=FALSE) 或使用 data.frame(your_object, stringsAsFactors=FALSE)

只是为了重现错误,你可以使用 iris dataset 来显示类似的错误,

scale(iris[,1:5], center=TRUE, scale=TRUE) 
## This fails with the same error as the last column in iris data set is a factor

但这会起作用,

scale(iris[,1:4], center=TRUE, scale=TRUE)

请注意,我将在此处删除该列,在您的情况下,您可能希望将其更改为数字(因此这完全取决于您在此处尝试执行的操作)。如果您确实想将其从一个因子更改为数字,请尝试运行 as.numeric(as.character(your_column))

同样按照 cmets 中的建议,尽量避免在 R 中的对象中包含点 in 的名称。

所以,所有信息的总和可以放在一行中,你应该试试这个:

data.frame(data1.csv, stringsAsFactors=FALSE) 然后尝试运行scale 命令。

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 2019-10-04
    • 2018-05-23
    • 2017-10-25
    • 2023-03-28
    • 2018-01-27
    • 2018-01-17
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多