Tablica indeksów bez elementów

Oct 10 2020

Mam wektor

a = Vector(1:4)

[1, 2, 3, 4]

i chcę go zaindeksować do wszystkich elementów oprócz trzeciego do pobrania

[1, 2, 4]

w czym Rmógłbyś to zrobić a[-3]. Co robisz w Julia?

(Ostatecznie chcę przejrzeć wszystkie elementy i porównać każdy z nich z resztą - może to ma znaczenie).

Odpowiedzi

6 PrzemyslawSzufel Oct 10 2020 at 13:23

Składnia Julii będzie niestety bardziej szczegółowa niż składnia R:

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

Inną opcją jest zmutowanie:

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

Jeśli twoje dane znajdują się w obrębie a DataFrame, możesz uzyskać ładniejszą składnię:

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

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

a kiedy DataFramesjest importowany, Notbędzie również działać z Vector:

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

Ten przypadek użycia jest powszechny i ​​jest objęty pakietem InvertedIndices.jl . Jeśli go zainstalujesz, możesz uruchomić:

julia> using InvertedIndices

julia> a = 1:4
1:4

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

Również niektóre pakiety (jak DataFrames.jl) automatycznie ładują ten pakiet (więc jeśli np. Używasz DataFrames.jl, nie musisz oddzielnie instalować i ładować InvertedIndices.jl).

BenoitPasquier Oct 14 2020 at 04:40

nie widziałem

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

lub

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

wspomniano, ale może jest dobry powód?


EDYCJA : Myliłem się, pierwsza odpowiedź jest właściwie taka sama, jak pierwsza odpowiedź Bogumiła, z wyjątkiem !==tego, że została zastąpiona≠