【问题标题】:R is there a way to find Inf/-Inf values?R 有没有办法找到 Inf/-Inf 值?
【发布时间】:2012-01-31 03:56:24
【问题描述】:

我正在尝试在大型数据集 (5000x300) 上运行 randomForest。不幸的是,我收到如下错误消息:

> RF <- randomForest(prePrior1, postPrior1[,6]
+                    ,,do.trace=TRUE,importance=TRUE,ntree=100,,forest=TRUE)
Error in randomForest.default(prePrior1, postPrior1[, 6], , do.trace = TRUE,  : 
  NA/NaN/Inf in foreign function call (arg 1)

所以我尝试使用以下方法查找任何 NA:

> df2 <- prePrior1[is.na(prePrior1)]
> df2 
character(0)
> df2 <- postPrior1[is.na(postPrior1[,6])]
> df2 
numeric(0)

这让我相信问题出在 Inf 上,因为似乎没有任何 NA。

关于如何根除 Inf 的任何建议?

【问题讨论】:

  • 不一定是Inf。正如错误所说,它也可能是NaN。无论如何,?Inf 会回答您的问题。

标签: r random-forest na


【解决方案1】:

您可能正在寻找 is.finite,尽管我不能 100% 确定问题出在您输入数据中的 Infs。

请务必仔细阅读is.finite 的帮助,了解它会识别出哪些缺失、无限等组合。具体来说:

> is.finite(c(1,NA,-Inf,NaN))
[1]  TRUE FALSE FALSE FALSE
> is.infinite(c(1,NA,-Inf,NaN))
[1] FALSE FALSE  TRUE FALSE

其中一件事情与其他事情不同。毫不奇怪,还有一个 is.nan 函数。

【讨论】:

  • 一般来说,randomForest 中关于 NA/NaN/Inf 的警告不是由 NA/NaN/Inf 引起的,实际上是由字符数据引起的。
【解决方案2】:

randomForest 的 'NA/NaN/Inf in foreign function call' 通常是一个错误警告,真的很烦人:

  • 如果传递的任何变量是字符,你就会得到这个
  • 实际的 NaN 和 Infs 在干净的数据中几乎不会发生

我的快速而肮脏的技巧来缩小范围,对变量列表进行二进制搜索,并使用像 ntree=2 这样的标记参数来获得变量子集的即时通过/失败:

RF <- randomForest(prePrior1[m:n],ntree=2,...)

【讨论】:

    【解决方案3】:

    类似于is.na,您可以使用is.infinite 查找无穷大的出现。

    【讨论】:

      【解决方案4】:

      看看with,例如:

      > with(df, df == Inf)
              foo   bar   baz   abc ...
      [1,]  FALSE FALSE  TRUE FALSE ...
      [2,]  FALSE  TRUE FALSE FALSE ...
      ...
      

      【讨论】:

        【解决方案5】:

        joran 的答案是您想要的并且内容丰富。有关is.na()is.infinite() 的更多详细信息,请查看https://stat.ethz.ch/R-manual/R-devel/library/Matrix/html/is.na-methods.html 此外,在你得到逻辑向量后,说明原始向量的每个元素是否为 NA/Inf,你可以使用which() 函数来获取索引,就像这样:

        > v1 <- c(1, Inf, 2, NaN, Inf, 3, NaN, Inf)
        > is.infinite(v1)
        [1] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
        > which(is.infinite(v1))
        [1] 2 5 8
        > is.na(v1)
        [1] FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
        > which(is.na(v1))
        [1] 4 7
        

        which() 的文档在这里https://stat.ethz.ch/R-manual/R-devel/library/base/html/any.html

        【讨论】:

          猜你喜欢
          • 2015-06-20
          • 2021-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多