Index-Array ohne Elemente
Ich habe einen Vektor
a = Vector(1:4)
[1, 2, 3, 4]
und ich möchte es auf alle Elemente indizieren, außer auf das dritte
[1, 2, 4]
in Rdu könntest tun a[-3]. Was machst du in Julia?
(Schließlich möchte ich alle Elemente durchlaufen und jedes mit dem Rest vergleichen - vielleicht ist dies relevant.)
Antworten
Die Julia-Syntax ist leider ausführlicher als die von R:
julia> a[1:end .!== 3]
3-element Array{Int64,1}:
1
2
4
Eine andere Möglichkeit besteht darin, a zu mutieren:
julia> deleteat!(a,3)
3-element Array{Int64,1}:
1
2
4
Wenn Ihre Daten innerhalb eines DataFrameals liegen, können Sie eine schönere Syntax erhalten:
julia> df = DataFrame(a=1:4);
julia> df[Not(3),:]
3×1 DataFrame
│ Row │ a │
│ │ Int64 │
├─────┼───────┤
│ 1 │ 1 │
│ 2 │ 2 │
│ 3 │ 4 │
und wenn DataFramesimportiert Notwird, funktioniert auch mit Vector:
julia> a[Not(3)]
3-element Array{Int64,1}:
1
2
4
Dieser Anwendungsfall ist häufig und wird vom Paket InvertedIndices.jl abgedeckt . Wenn Sie es installieren, können Sie Folgendes ausführen:
julia> using InvertedIndices
julia> a = 1:4
1:4
julia> a[Not(3)]
3-element Array{Int64,1}:
1
2
4
Auch einige Pakete (wie DataFrames.jl) laden dieses Paket automatisch (wenn Sie also beispielsweise DataFrames.jl verwenden, müssen Sie InvertedIndices.jl nicht separat installieren und laden).
Ich habe nicht gesehen
julia> a[1:end .≠ 3]
3-element Array{Int64,1}:
1
2
4
oder
julia> a[eachindex(a) .≠ 3]
3-element Array{Int64,1}:
1
2
4
erwähnt, aber vielleicht gibt es einen guten Grund?
EDIT : Ich habe mich geirrt, die erste ist tatsächlich die gleiche wie Bogumils erste Antwort, außer dass !==sie durch ersetzt wurde≠