Dans R, nous pouvons créer un vecteur vide où il est possible d'insérer un élément à n'importe quelle position de ce vecteur. Exemple:
> x <- c()
> x[1] = 10
> x[4] = 20
Le résultat final est:
> x
[1] 10 NA NA 20
Je voudrais faire quelque chose de similaire en utilisant Julia, mais je n'ai pas trouvé de moyen de le faire. La fonction "append" n'effectue pas quelque chose comme ça.
Quelqu'un pourrait-il aider?
Solution du problème
Vous devez le faire en deux étapes :
Puisque vous venez de RI, supposez que vous voulez que le vecteur soit initialement rempli de valeurs manquantes. Voici comment procéder.
Dans mon exemple, je suppose que vous souhaitez stocker des entiers dans le vecteur. Avant que les deux options ne chargent le package Missings.jl :
using Missings
Option 1. Commencer avec un vecteur vide
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
Option 2. Préallouer un vecteur
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
La raison pour laquelle Julia ne redimensionne pas automatiquement les vecteurs est par sécurité. Parfois, ce serait utile, mais la plupart du temps, si x
est un vecteur vide et que vous l'écrivez x[4] = 40
, c'est un bogue dans le code et Julia détecte de tels cas.
ÉDITER
Ce que vous pouvez faire, c'est:
function setvalue(vec::Vector, idx, val)
@assert idx > 0
if idx > length(vec)
resize!(vec, idx)
end
vec[idx] = val
return vec
end
Aucun commentaire:
Enregistrer un commentaire