【问题标题】:Why R returns NA when computing mean on non null matrix为什么在非空矩阵上计算均值时 R 返回 NA
【发布时间】:2014-04-07 12:50:40
【问题描述】:

我有一个由浮点数组成的矩阵。我查过了,没有缺失值。

最近,我将列标题从(例如)更改为:

2670

COLUMN-HEADER-A-2670

我正在运行最近模板预测算法提供的代码,我无法更改。

我发现错误可能位于计算列轴上的平均值时,对于矩阵的每一行,即

exp.mean <- apply(exp.dataset,1,mean,na.rm=T)

所有行的平均值被强制为NA,R 控制台告诉我

Browse[2]> exp.mean <- apply(exp.dataset,1,mean,na.rm=T)
There were 50 or more warnings (use warnings() to see the first 50)
1: In mean.default(newX[, i], ...) :
  argument is not numeric or logical: returning NA

我认为它与标题类型有关,但我找不到任何解释它的东西。该算法使用上一列符号。

【问题讨论】:

  • 请将dput(head(exp.dataset)) 的输出添加到您的问题中,以便我们重现您的问题。顺便说一句,您的代码的一个更快的替代方案是rowMeans
  • 您是否使用read.table 从文本文件中读取矩阵而不指定header = TRUE?如果是这样,文件的第一行(您认为是列名)将作为数据框中的第一行结束。
  • 还要检查列类,错误消息说您要向函数传递非数字参数。
  • @Henrik 不,有header = T。 @Roland 我无法添加它(dput),因为数据框有 19000 多行和 450 列,它导致数据集很长 - 我无法更改代码,因为我必须在发布时使用它。 @Jaap 我如何检查列类?
  • 您可以使用例如检查哪些列不是数字的df &lt;- data.frame(a = 10, b = 20, c = "30"); which(sapply(df, class) != "numeric")

标签: r algorithm matrix mean na


【解决方案1】:

答案是,在 3.1.0 中,read.table() 返回一个字符向量而不是数字向量,如果将表表示为双矩阵可能会失去准确性。

来自here

type.convert()(因此默认情况下为 read.table())在将数字输入表示为双精度时会返回字符向量或因子,这将失去准确性。对于复杂的输入也是如此。

如果文件包含具有不可表示的小数位数的数字数据,这些数据旨在被读取为数字,请将 read.table() 中的 colClasses 指定为“numeric”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多