在 R 中的值替换期间区分无穷大和负无穷大

Distinguishing between infinity and negative infinity during value replacement in R

this thread.

中有一些很好的例子说明如何用 NA 替换 R 中的无限值

例如,

DT <- data.table(dat)
invisible(lapply(names(DT),function(.name) set(DT, 
           which(is.infinite(DT[[.name]])), j = .name,value =NA)))

但是,这不区分正无穷大 (Inf) 和负无穷大 (-Inf)。

我需要做出这种区分,因为我不只是用 NA 替换值并将它们扔掉或估算它们,我想尝试使用最大非无限值来表示正无穷大和最小值负无穷大的非无穷大值(以及类似的东西)。

这可能吗?

示例输入数据

a <- c(-1,2,3,4,100/0,-100/0)

[1] -1 2 3 4 Inf -Inf

示例输出数据

[1] -1 1 2 3 4 4 -1

为什么不将 is.infinite 与标准 >< 比较结合起来?

a <- c(-1,2,3,4,100/0,-100/0)

a[is.infinite(a) & a < 0] <- min(a[!is.infinite(a)])
a[is.infinite(a) & a > 0] <- max(a[!is.infinite(a)])
a
[1] -1  2  3  4  4 -1

您可以 extract/replace 向量中的任何 -Inf 或 Inf 值,甚至更简单:

a <- c(-1,2,3,4,100/0,-100/0)   

a[a <= -Inf] <- min(a[is.finite(a)])    
a[a >= Inf] <- max(a[is.finite(a)])  

a
[1] -1  2  3  4  4 -1