簡體   English   中英

R 有沒有辦法找到 Inf/-Inf 值?

[英]R is there a way to find Inf/-Inf values?

我正在嘗試在大型數據集 (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 的任何建議?

您可能正在尋找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”通常是一個錯誤警告,而且真的很煩人:

  • 如果傳遞的任何變量是字符,你就會得到這個
  • 實際的 NaN 和 Inf幾乎不會發生在干凈的數據中

我的快速和骯臟的技巧來縮小范圍,對變量列表進行二分搜索,並使用像ntree=2這樣的令牌參數來獲得變量子集的即時通過/失敗:

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

is.na類似,您可以使用is.infinite來查找無窮大的出現。

看看with ,例如:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM