Index Array senza elementi
Ho un vettore
a = Vector(1:4)
[1, 2, 3, 4]
e voglio indicizzarlo su tutti gli elementi tranne il terzo per ottenere
[1, 2, 4]
in Rche si possa fare a[-3]. Cosa fai Julia?
(Alla fine voglio scorrere tutti gli elementi e confrontare ciascuno di essi con il resto - forse questo è rilevante.)
Risposte
La sintassi Julia sarà purtroppo più prolissa di quelle di R:
julia> a[1:end .!== 3]
3-element Array{Int64,1}:
1
2
4
Un'altra opzione è modificare un:
julia> deleteat!(a,3)
3-element Array{Int64,1}:
1
2
4
Se i tuoi dati sono all'interno di un di DataFramequanto puoi ottenere una sintassi migliore:
julia> df = DataFrame(a=1:4);
julia> df[Not(3),:]
3×1 DataFrame
│ Row │ a │
│ │ Int64 │
├─────┼───────┤
│ 1 │ 1 │
│ 2 │ 2 │
│ 3 │ 4 │
e quando DataFramesviene importato Notfunzionerà anche con Vector:
julia> a[Not(3)]
3-element Array{Int64,1}:
1
2
4
Questo caso d'uso è comune ed è coperto dal pacchetto InvertedIndices.jl . Se lo installi, puoi eseguire:
julia> using InvertedIndices
julia> a = 1:4
1:4
julia> a[Not(3)]
3-element Array{Int64,1}:
1
2
4
Anche alcuni pacchetti (come DataFrames.jl) caricano automaticamente questo pacchetto (quindi se ad esempio usi DataFrames.jl non devi installare e caricare InvertedIndices.jl separatamente).
Non ho visto
julia> a[1:end .≠ 3]
3-element Array{Int64,1}:
1
2
4
o
julia> a[eachindex(a) .≠ 3]
3-element Array{Int64,1}:
1
2
4
accennato, ma forse c'è un buon motivo?
EDIT : mi sbagliavo, il primo è in realtà lo stesso della prima risposta di Bogumil tranne che !==è stato sostituito con≠