Принудительное деление на ноль по умолчанию NaN вместо Inf

Я задаюсь вопросом, может ли там быть обстановка, которую я пропускаю, чтобы заставить R возвращать NaN вместо ±Inf при делении на ноль.

Слишком часто я делаю что-то вроде

 results[is.infinite(results)] <- NaN

Я надеюсь вообще пропустить процесс фильтрации / поиска.


Пример:

### Example:

num <- c(1:5, NA)
denom <- -2:3

quotient <- num / denom
[1] -0.5 -2.0  Inf  4.0  2.5   NA

# desired results
[1] -0.5 -2.0  NaN  4.0  2.5   NA

Простой способ достижения желаемых результатов:

quotient[is.infinite(quotient)] <- NaN

Что мне интересно, так это то, что этого последнего шага можно избежать, но при этом получить те же самые желаемые результаты.

2 ответа

Я бы переключил свой предикат, а не пытался переопределить математику:

 R> is.finite(c(Inf, NA, NaN))    
 [1] FALSE FALSE FALSE 
 R> is.infinite(c(Inf, NA, NaN))   
 [1]  TRUE FALSE FALSE 
 R> is.na(c(Inf, NA, NaN)) 
 [1] FALSE  TRUE  TRUE
 R> 

Эти свойства будут полезны? 0*Inf является NaN а также NaN+Inf это также NaNпоэтому попытка чего-то подобного также даст желаемый результат:

quotient <- (num / denom)*0 + (num / denom)
## [1] -0.5 -2.0  NaN  4.0  2.5   NA
Другие вопросы по тегам