Data.table: DT[TRUE] kann zu einem ungültigen Schlüssel führen

Erstellt am 13. Dez. 2018  ·  4Kommentare  ·  Quelle: Rdatatable/data.table

Ich wusste nicht, dass DT[TRUE] eine Möglichkeit ist, eine flache Kopie zu erhalten. seichte Kopie war nur für den internen Gebrauch bestimmt. Danke an @renkun-ken für die Hervorhebung in #3214 und verwandten #2254.

  • [x] #3214
  • [ ] #2254

In v1.11.8 sehen wir dies:

DT = data.table(id = 1:5, key="id")
DT1 = DT[TRUE]
key(DT1)
[1] "id"
DT1[3, id:=6L]
key(DT1)
# NULL              # correct
DT$id
# [1] 1 2 6 4 5     # should be 1:5
key(DT)
# [1] "id"          # invalid key

Es tritt erst nach DT[TRUE] , iiuc, was die Leute hoffentlich nicht entdeckt oder sich zu sehr darauf verlassen haben?! Ich hoffe, die Verwendung da draußen ist wie bei @renkun-ken beschrieben, um der flachen Kopie neue Spalten hinzuzufügen, nicht um vorhandene Spalten zu ändern!

Der neue Test 1542.08 wurde in PR #2313 hinzugefügt, der bereit ist, wenn dies behoben ist.

bug

Hilfreichster Kommentar

Ja, setkey, das Ändern vorhandener Spalten sollte bei der flachen Kopie nicht verwendet werden, da die Spalten selbst nicht kopiert werden.

Alle 4 Kommentare

Ja, setkey, das Ändern vorhandener Spalten sollte bei der flachen Kopie nicht verwendet werden, da die Spalten selbst nicht kopiert werden.

Wenn wir keine flachen Kopien mit dt[TRUE] zulassen, wird dieses Problem automatisch behoben.

Schließlich. Aber in der Zwischenzeit können wir den Workflow von @renkun-ken nicht unterbrechen.
Mehr Details hier: https://github.com/Rdatatable/data.table/issues/3214#issuecomment -462490046

der folgende Code könnte zu Tests hinzugefügt werden, um das Kopierverhalten sicherzustellen

DT = data.table(a=c(1,2), b=c("b","a"))
address(DT)
address(DT[])
address(DT[, .SD])
address(DT[TRUE])
sapply(DT, address)
sapply(DT[], address)
sapply(DT[, .SD], address)
sapply(DT[TRUE], address)
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

mattdowle picture mattdowle  ·  3Kommentare

franknarf1 picture franknarf1  ·  3Kommentare

st-pasha picture st-pasha  ·  3Kommentare

andschar picture andschar  ·  3Kommentare

tcederquist picture tcederquist  ·  3Kommentare