R有没有找到Inf/-Inf值的方法?

scr*_*Owl 12 r na random-forest

我正在尝试在大型数据集(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)
Run Code Online (Sandbox Code Playgroud)

所以我尝试找到任何NA使用:

> df2 <- prePrior1[is.na(prePrior1)]
> df2 
character(0)
> df2 <- postPrior1[is.na(postPrior1[,6])]
> df2 
numeric(0)
Run Code Online (Sandbox Code Playgroud)

这让我相信它是Inf的问题,因为似乎没有任何NA.

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

jor*_*ran 22

您可能正在寻找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
Run Code Online (Sandbox Code Playgroud)

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

  • 一般来说,来自randomForest的关于NA/NaN/Inf的警告不是由NA/NaN/Inf引起的,而是由字符数据引起的. (3认同)

smc*_*mci 10

randomForest的'外国函数调用中的NA/NaN/Inf'通常是一个错误警告,真的很烦人:

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

快速而肮脏的技巧缩小范围,在变量列表上进行二进制搜索,并使用令牌参数,例如ntree=2在变量子集上获得即时通过/失败:

RF <- randomForest(prePrior1[m:n],ntree=2,...)
Run Code Online (Sandbox Code Playgroud)


Pau*_*tra 5

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