#julia
#julia
Вопрос:
В R
я могу создать вектор длиной 5 со всеми NA_real_
значениями:
x <- 1:5
length(x)
## [1] 5
rep(NA_real_, times = length(x))
## [1] NA NA NA NA NA
Как я могу сделать то же самое в julia
? Я могу создать вектор, содержащий нули, но я не знаю, как поместить туда пропущенные значения:
v = Vector{Float64}(undef, 5)
## 5-element Array{Float64,1}:
0.0
0.0
0.0
0.0
0.0
Ответ №1:
Вызывается пропущенное значение в Julia missing
. Это одноэлементный тип Missing
. Вы можете создать вектор пропущенных значений следующим образом:
v = Vector{Missing}(undef, 5)
# 5-element Array{Missing,1}:
# missing
# missing
# missing
# missing
# missing
Или, что более удобно, используя fill
:
v = fill(missing, 5)
Имейте в виду, однако, что, в отличие от R, Missing
не разделяет тип с другими числовыми типами: это его собственный тип. Обратите внимание, что происходит, когда вы пытаетесь поместить a Float64
в вектор Missing
s:
v = fill(missing, 5)
# 5-element Array{Missing,1}:
# missing
# missing
# missing
# missing
# missing
v[1] = 3.14
# ERROR: MethodError: convert(::Type{Union{}}, ::Float64) is ambiguous.
Это означает, что если вы хотите создать вектор, содержащий только пропущенные значения, но вы хотите, чтобы он также мог содержать числовое значение, например a Float64
, вы должны быть явными:
v = convert(Array{Union{Float64,Missing}}, v)
# 5-element Array{Union{Missing, Float64},1}:
# missing
# missing
# missing
# missing
# missing
v[1] = 3.14;
v
# 5-element Array{Union{Missing, Float64},1}:
# 3.14
# missing
# missing
# missing
# missing
Комментарии:
1. Спасибо. Я пытаюсь научить julia ускорять цикл for, который выполняется медленно в R (у меня нет другого варианта делать то, что я хочу делать без цикла). Но я думаю, что обучение может занять больше времени, чем цикл в R.
2. Да, но «обучение» похоже на компиляцию, это занимает время только один раз.
Ответ №2:
Vector{Union{Float64,Missing}}(missing, 5)
должен делать то, что вы хотите.
Комментарии:
1. Спасибо за вашу помощь.
2. Пакет Missings.jl также предоставляет
missings(Float64, 5)
в качестве сокращения.