我花了几个小时调试一些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
R中是否还有其他特殊数据类型应该注意?
答案 0 :(得分:4)
!is.finite(x)
相当于您的is.bad(x)
;它会检测Inf
(以及-Inf
),NA
和NaN
值。
答案 1 :(得分:1)
根据您的工作情况,is.null()
可能在某些时候也可以为您节省大量时间。很难说一般。
答案 2 :(得分: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
正确间隔,而不是错误信息。