The intent of filter is to construct an entirely new collection excluding the filtered elements, and Iterators.filter is a lazy variant.
The intent of skipmissing (and skip) is different: we intend to continue working with the same collection, but we’re specifying that for this operation certain elements won’t be under consideration.
The example here is a good one for demonstrating the difference; because filter returns a brand new collection, the indices will be entirely different from the original collection. In reflection of this, Iterators.filter isn’t even indexable. skip, on the other hand, does what we want here.
julia> using Skipper
data = collect(1:10)
findmin(skip(<(4), data))
(4, 4)
julia> findmin(Iterators.filter(!<(4), data))
ERROR: MethodError: no method matching keys(::Base.Iterators.Filter{ComposedFunction{typeof(!), Base.Fix2{typeof(<), Int64}}, Vector{Int64}})