J'explorais des alternatives pour effectuer des opérations sur les lignes dans data.table
et je pense avoir trouvé un bogue.
Ces trois lignes de code doivent renvoyer le même résultat. Cependant, le résultat de by = .I
semble renvoyer un résultat erroné.
dt[, sdd := sum(.SD[, 2:4, with=FALSE]), by = 1:NROW(dt) ]
dt[, rowpos := .I][ , sdd := sd(.SD[, -1, with=FALSE]), by = rowpos ]
dt[ , sdd := sd(.SD[, -1, with=FALSE]), by = .I ]
exemples de données :
dt <- data.table(V0 =LETTERS[c(1,1,2,2,3)],
V1=1:5,
V2=3:7,
V3=5:1)
Alternativement, by = .I
devrait donner une erreur, bien que ce serait bien de le faire fonctionner avec un cadeau i-expression
.
Problème similaire avec l'utilisation de .N
dans by
(encore une fois, on pourrait naïvement essayer - dt[, ..., by = 1:.N]
- bien que cette expression particulière donne une erreur, ce n'est pas vraiment la "bonne" erreur).
Pourquoi ne pas simplement ajouter la fonctionnalité "rowwise" en utilisant by = .I
, ce qui semble intuitif.
Salut @leoluyi ,
le comportement de by = .I
est équivalent à by = NULL
. Jetez un œil à cette discussion SO https://stackoverflow.com/questions/37667335/row-operations-in-data-table-using-by-i