1

我刚刚花了几个小时调试一些 R 代码,却发现错误是由于Inf在我的计算过程中潜入的。我检查过NA,但没想过检查Inf

我编写了以下函数来帮助防止将来出现这种情况:

is.bad <- function(x){
  is.na(x) | is.nan(x) | is.infinite(x)
}

>     is.bad(c(NA, NaN, Inf, -Inf, 0, 1, 1000, 1e6))
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE

RI 中是否还有其他特殊数据类型需要注意?

4

3 回答 3

4

!is.finite(x)相当于你的is.bad(x); 它检测Inf(and -Inf) NA、 和NaN值。

于 2012-10-24T22:56:59.567 回答
1

这有点取决于你想要做什么。我最近在为一堆数据子集创建线性模型时遇到了类似的问题。在可能的情况下获得系数对我有用,而 NA 而不是程序停止错误消息是:

Coef <- ifelse(is.numeric(try(coef(lm(y~x, data=DF)), silent=T)), coef(lm(y~x+0, DF)), NA)

所以我会得到一个向量

 [1] 2.3 4.3 5.4 6.2 2.8 NA 3.2

适当间隔,而不是错误消息。

于 2012-10-24T22:15:45.367 回答
1

根据您正在做的事情,is.null()可能在某些时候还可以为您节省大量时间。一般很难说。

于 2012-10-24T22:08:05.990 回答