# Isusefulnumber()

**URL:** <https://discourse.julialang.org/t/isusefulnumber/93795>\
**Category:** General Usage\
**Tags:** numbers, nan, missing-values, nothing, inf\
**Created:** [January 30, 2023, 10:16pm UTC](https://discourse.julialang.org/t/isusefulnumber/93795 "2023-01-30T22:16:48Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ellocco](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ellocco/32/31331_2.png) [@ellocco](https://discourse.julialang.org/u/ellocco)\
**Post date:** [January 30, 2023, 10:16pm UTC](https://discourse.julialang.org/t/isusefulnumber/93795/1 "2023-01-30T22:16:48Z")

</div>

Is there a function available to check in a large vector, if one of the following occurs in a vector:

- missing
- nothing
- Inf
- NaN

?  
Here is my snippet to investigate a vector for such elements:

```julia
a = [1.3, NaN, Inf, missing, nothing, 1.3]
# ---
println('-'^100)
for i_element in a
    if isa(i_element, Number)
        println("is number: ", i_element," ,\t isnan(i_element): ", isnan(i_element), ", \t isinf(i_element)", isinf(i_element))
    else
        println("is no number: ", i_element)
    end
end
println('-'^100)
# --- find non-number plus Inf plus NaN elements: -----------------------------------------
vector_ = isa.(a, Number)
b = a[vector_]
c = isinf.(b) .| isnan.(b)
b_contains_bad_elements = any(c)
if b_contains_bad_elements
    println("vector \"a\" contains bad elements")
end
# --- local function: -----------------------------------------------------------------------------------
function _contains_bad_elements(_vec::AbstractVector)
    _isnumber = isa.(_vec, Number)
    _nonumber = false .== _isnumber
    _numbers = _vec[_isnumber]
    return any(vcat(isinf.(_numbers) .| isnan.(_numbers), _nonumber))
end
# ---
_isusefulnumber(a)

```

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [January 30, 2023, 10:23pm UTC](https://discourse.julialang.org/t/isusefulnumber/93795/2 "2023-01-30T22:23:57Z")

</div>

It’s not too hard to implement:

```julia
julia> is_useful(::Any) = false
is_useful (generic function with 3 methods)

julia> is_useful(x::Number) = isfinite(x)
is_useful (generic function with 3 methods)

julia> a = [1.3, NaN, Inf, missing, nothing, 1.3, "a"]
7-element Vector{Any}:
   1.3
 NaN
  Inf
    missing
    nothing
   1.3
    "a"

julia> is_useful.(a)
7-element BitVector:
 1
 0
 0
 0
 0
 1
 0

julia> any(is_useful, a)
true

julia> all(is_useful, a)
false

```

---

<div class="post-metadata">

**Author:** ![jacobusmmsmit](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jacobusmmsmit/32/217669_2.png) [@jacobusmmsmit](https://discourse.julialang.org/u/jacobusmmsmit)\
**Post date:** [January 30, 2023, 10:24pm UTC](https://discourse.julialang.org/t/isusefulnumber/93795/3 "2023-01-30T22:24:45Z")

</div>

I love dispatch.
