Tableau d'index sans éléments

Oct 10 2020

J'ai un vecteur

a = Vector(1:4)

[1, 2, 3, 4]

et je veux l'indexer sur tous les éléments sauf le troisième pour obtenir

[1, 2, 4]

dans Rvous pourriez faire a[-3]. Que faites-vous Julia?

(Finalement, je veux parcourir tous les éléments et comparer chacun d'eux au reste - peut-être que c'est pertinent.)

Réponses

6 PrzemyslawSzufel Oct 10 2020 at 13:23

La syntaxe Julia sera malheureusement plus verbeuse que celles de R:

julia> a[1:end .!== 3]
3-element Array{Int64,1}:
 1
 2
 4

Une autre option consiste à faire muter un:

julia> deleteat!(a,3)
3-element Array{Int64,1}:
 1
 2
 4

Si vos données se trouvent dans un, DataFramevous pouvez obtenir une meilleure syntaxe:

julia> df = DataFrame(a=1:4);

julia> df[Not(3),:]
3×1 DataFrame
│ Row │ a     │
│     │ Int64 │
├─────┼───────┤
│ 1   │ 1     │
│ 2   │ 2     │
│ 3   │ 4     │

et quand DataFramesest importé Notfonctionnera également avec un Vector:

julia> a[Not(3)]
3-element Array{Int64,1}:
 1
 2
 4
7 BogumiłKamiński Oct 10 2020 at 13:26

Ce cas d'utilisation est courant et est couvert par le package InvertedIndices.jl . Si vous l'installez, vous pouvez exécuter:

julia> using InvertedIndices

julia> a = 1:4
1:4

julia> a[Not(3)]
3-element Array{Int64,1}:
 1
 2
 4

De plus, certains packages (comme DataFrames.jl) chargent automatiquement ce package (donc si vous utilisez par exemple DataFrames.jl, vous n'avez pas à installer et à charger InvertedIndices.jl séparément).

BenoitPasquier Oct 14 2020 at 04:40

je n'ai pas vu

julia> a[1:end .≠ 3]
3-element Array{Int64,1}:
 1
 2
 4

ou

julia> a[eachindex(a) .≠ 3]
3-element Array{Int64,1}:
 1
 2
 4

mentionné, mais il y a peut-être une bonne raison?


EDIT : Je me suis trompé, la première est en fait la même que la première réponse de Bogumil sauf qu'elle !==a été remplacée par