Shouldnt findfirst propagate missing instead of erroring


function findfirst_propagate_missing(A, x)
    if x in A
        return findfirst(isequal(x), A)
    else
        return missing
    end
end

Solution 1: Using a custom function

In this solution, we define a custom function called findfirst_propagate_missing that takes in an array A and a value x. It checks if x is present in A using the in operator. If it is, it returns the index of the first occurrence of x using the findfirst function. If x is not present, it returns missing.


A = [1, 2, 3, 4, 5]
x = 3

index = findfirst_propagate_missing(A, x)
println(index)  # Output: 3

x = 6
index = findfirst_propagate_missing(A, x)
println(index)  # Output: missing

Solution 2: Using the coalesce operator

In this solution, we can use the coalesce operator (??) to propagate the missing value. The coalesce operator returns the first non-missing value from a list of expressions. We can combine the findfirst function with the coalesce operator to achieve the desired behavior.


A = [1, 2, 3, 4, 5]
x = 3

index = findfirst(isequal(x), A) ?? missing
println(index)  # Output: 3

x = 6
index = findfirst(isequal(x), A) ?? missing
println(index)  # Output: missing

Solution 3: Using the ternary operator

In this solution, we can use the ternary operator (condition ? expression1 : expression2) to propagate the missing value. The ternary operator evaluates the condition and returns expression1 if the condition is true, and expression2 otherwise. We can combine the findfirst function with the ternary operator to achieve the desired behavior.


A = [1, 2, 3, 4, 5]
x = 3

index = x in A ? findfirst(isequal(x), A) : missing
println(index)  # Output: 3

x = 6
index = x in A ? findfirst(isequal(x), A) : missing
println(index)  # Output: missing

Among the three options, Solution 1 using a custom function is the better choice. It provides a clear and concise way to propagate the missing value without relying on additional operators. It also allows for easy modification or extension of the logic if needed.

Rate this post

Leave a Reply

Your email address will not be published. Required fields are marked *

Table of Contents