Существует одиночный тип Missing
, единственным экземпляром которого является значение missing
, которое представляет отсутствующее значение в Джулии.Следовательно, в отличие от R, нет различия между отсутствием типа float, логическим и т. Д.
Причина такого дизайна в том, что в Julia вы можете определить свой собственный тип, поэтому невозможно перечислитьвсе возможные типы пропущенных, как в R.
Вы можете проверить это, написав:
julia> missing isa Missing
true
julia> supertype(Missing)
Any
Обычно коллекции, допускающие пропущенное значение, имеют тип элемента Union{Missing, Actual_Type_You_Want}
, например:
julia> [1, 2, missing]
3-element Array{Union{Missing, Int64},1}:
1
2
missing
julia> Dict(1=>1, 2=>missing)
Dict{Int64,Union{Missing, Int64}} with 2 entries:
2 => missing
1 => 1
Теоретически было бы возможно определить параметрический тип Missing{T}
, который бы содержал информацию о типе T
, но это было бы не очень удобно использовать на практике, так как тогда у вас был бы отдельный синтаксисдля каждого типа пропущенного значения, и в настоящее время достаточно написать missing
, и у вас есть то, что вы хотите.
Обратите внимание, что именно так и поступает большинство пользователей R, так как когда они пишут NA
, это так.логического типа, и он преобразуется под капотом в соответствии с типом коллекции, в которую он помещен.Из моего опыта вы можете видеть NA_real_
и подобные очень редко в реальном коде R.