Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 创建整数和缺失值的向量_Julia - Fatal编程技术网

Julia 创建整数和缺失值的向量

Julia 创建整数和缺失值的向量,julia,Julia,多么迷茫啊 我试图创建一个包含整数s和缺失值的向量。这很好: b = [4, missing, missing, 3] 但实际上我希望向量更长,缺少更多的值,因此使用repeat(),但这不起作用 append!([1,2,3], repeat([missing], 1000)) [1,2,3, repeat([missing], 1000)] 这也不起作用 append!([1,2,3], repeat([missing], 1000)) [1,2,3, repeat([missing

多么迷茫啊

我试图创建一个包含
整数
s和
缺失
值的向量。这很好:

b = [4, missing, missing, 3]
但实际上我希望向量更长,缺少更多的
值,因此使用
repeat()
,但这不起作用

append!([1,2,3], repeat([missing], 1000))
[1,2,3, repeat([missing], 1000)]
这也不起作用

append!([1,2,3], repeat([missing], 1000))
[1,2,3, repeat([missing], 1000)]
请帮帮我,在这里。

这样可以:

append!(Union{Int,Missing}[1,2,3], repeat([missing], 1000))

[1,2,3]
只创建一个
向量{Int}
,由于Julia是强类型的
向量{Int}
不能接受非
Int
类型的值。因此,当定义一个结构时,您计划在其中保存更多的数据类型,您需要显式地声明它-在这里我们定义了
Vector{Union{Int,Missing}

,同样值得注意的是,如果您不需要使用
append执行就地操作实际上,在这种情况下,进行垂直连接要容易得多:

julia> [[1, 2, 3]; repeat([missing], 2); 4; 5] # note ; that denotes vcat
7-element Array{Union{Missing, Int64},1}:
 1
 2
 3
  missing
  missing
 4
 5

julia> vcat([1,2,3], repeat([missing], 2), 4, 5) # this is the same but using a different syntax
7-element Array{Union{Missing, Int64},1}:
 1
 2
 3
  missing
  missing
 4
 5
vcat
的好处是它自动执行类型提升(与
append!
相反,在这种情况下,您必须在操作之前正确指定目标容器的
eltype


请注意,由于
vcat
在角落案例中执行自动类型升级,因此您可能会获得不同的
eltype
操作结果:

julia> x = [1, 2, 3]
3-element Array{Int64,1}:
 1
 2
 3

julia> append!(x, [1.0, 2.0]) # conversion from Float64 to Int happens here
5-element Array{Int64,1}:
 1
 2
 3
 1
 2

julia> [[1, 2, 3]; [1.0, 2.0]] # promotion of Int to Float64 happens in this case
5-element Array{Float64,1}:
 1.0
 2.0
 3.0
 1.0
 2.0

另请参见。

谢谢。尽管两个答案都有效,但我认为这是一个更优雅的答案。(可能是这样,因为我来自
R
),通常这是首选方法(除非您希望对现有集合进行就地更新)。我添加了一个小注释,希望它能向您展示在决定使用
append时应该注意的角落案例场景
vs
vcat
。我建议写
fill(missing,1000)
而不是
重复([missing],1000)
。它更地道,在我的电脑上,至少快了200倍。说得好。谢谢