[英]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”通常是一個錯誤警告,而且真的很煩人:
我的快速和骯臟的技巧來縮小范圍,對變量列表進行二分搜索,並使用像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.