Принудительное деление на ноль по умолчанию 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