如何在空向量的特定位置插入元素?

How to insert an element at a specific position of an empty vector?

在 R 中,我们可以创建一个空向量,可以在该向量的任何位置插入一个元素。 示例:

> x <- c()
> x[1] = 10
> x[4] = 20

最后的结果是:

> x
[1] 10 NA NA 20

我想用 Julia 做一些类似的事情,但找不到方法。 “附加”功能不会执行类似的操作。

有人能帮忙吗?

您需要分两步完成:

  1. 首先调整矢量的大小或创建一个适当大小的矢量。
  2. 接下来相应地设置元素。

由于您来自 R,我假设您希望向量最初填充缺失值。这是执行此操作的方法。

在我的示例中,我假设您要在向量中存储整数。在两个选项加载 Missings.jl 包之前:

using Missings

选项 1. 从空向量开始

julia> x = missings(Int, 0)
Union{Missing, Int64}[]

julia> resize!(x, 4)
4-element Vector{Union{Missing, Int64}}:
 missing
 missing
 missing
 missing

julia> x[1] = 10
10

julia> x[4] = 40
40

julia> x
4-element Vector{Union{Missing, Int64}}:
 10
   missing
   missing
 40

选项 2. 预分配向量

julia> x = missings(Int, 4)
4-element Vector{Union{Missing, Int64}}:
 missing
 missing
 missing
 missing

julia> x[1] = 10
10

julia> x[4] = 40
40

Julia 不自动调整向量大小的原因是为了安全。有时它会很有用,但大多数时候如果 x 是一个空向量而你写 x[4] = 40 它是代码中的一个错误,Julia 会捕获这种情况。


编辑

您可以做的是:

function setvalue(vec::Vector, idx, val)
    @assert idx > 0
    if idx > length(vec)
        resize!(vec, idx)
    end
    vec[idx] = val
    return vec
end