# When should we use passmissing?

**URL:** <https://discourse.julialang.org/t/when-should-we-use-passmissing/82844>\
**Category:** General Usage\
**Created:** [June 15, 2022, 10:05pm UTC](https://discourse.julialang.org/t/when-should-we-use-passmissing/82844 "2022-06-15T22:05:35Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Raymond](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raymond/32/36557_2.png) [@Raymond](https://discourse.julialang.org/u/Raymond)\
**Post date:** [June 15, 2022, 10:05pm UTC](https://discourse.julialang.org/t/when-should-we-use-passmissing/82844/1 "2022-06-15T22:05:35Z")

</div>

Dear all,

I find that whether or not use `passmissing`, the results are the same. So when should we use `passmissing`?Here are some examples.

```julia
julia> sqrt(missing)
missing

julia> passmissing(sqrt)(missing)
missing

julia> abs.([1, 2, missing])
3-element Vector{Union{Missing, Int64}}:
 1
 2
  missing

julia> passmissing(abs).([1, 2, missing])
3-element Vector{Union{Missing, Int64}}:
 1
 2
  missing

julia> (x->x^2).([1, 2, missing])
3-element Vector{Union{Missing, Int64}}:
 1
 4
  missing

julia> passmissing(x->x^2).([1, 2, missing])
3-element Vector{Union{Missing, Int64}}:
 1
 4
  missing

```

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [June 16, 2022, 5:33am UTC](https://discourse.julialang.org/t/when-should-we-use-passmissing/82844/2 "2022-06-16T05:33:29Z")

</div>

Please [check this example](https://discourse.julialang.org/t/release-announcements-for-dataframes-jl/18258/31).

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [June 16, 2022, 6:34am UTC](https://discourse.julialang.org/t/when-should-we-use-passmissing/82844/3 "2022-06-16T06:34:21Z")

</div>

In the main its for “lifting” functions which don’t have a method to deal with `Missing`:

```julia
julia> parse.(Int, ["1", missing, "2"])
ERROR: MethodError: no method matching parse(::Type{Int64}, ::Missing)

```

versus

```julia
julia> passmissing(parse).(Int, ["1", missing, "2"])
3-element Vector{Union{Missing, Int64}}:
 1
  missing
 2

```

It essentially does `f_passmissing(x) = ismissing(x) ? missing : f(x)`

---

<div class="post-metadata">

**Author:** ![aplavin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aplavin/32/222056_2.png) [@aplavin](https://discourse.julialang.org/u/aplavin)\
**Post date:** [June 16, 2022, 7:14am UTC](https://discourse.julialang.org/t/when-should-we-use-passmissing/82844/4 "2022-06-16T07:14:34Z")

</div>

Missing handling is quite inconsistent in Base Julia, even across simple mathematical functions:

```julia
julia> sin(missing)
missing

julia> sind(missing)
ERROR: MethodError

```

That’s where `passmissing` or manual checks come in handy.

---

<div class="post-metadata">

**Author:** ![Raymond](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raymond/32/36557_2.png) [@Raymond](https://discourse.julialang.org/u/Raymond)\
**Post date:** [June 16, 2022, 8:07am UTC](https://discourse.julialang.org/t/when-should-we-use-passmissing/82844/5 "2022-06-16T08:07:37Z")

</div>

@rafael.guerra @aplavin @nilshg thanks for all of your help.
