Data.table: Opérations sur les lignes dans data.table en utilisant `by = .I`

Créé le 7 juin 2016  ·  3Commentaires  ·  Source: Rdatatable/data.table

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)

Low bug

Tous les 3 commentaires

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.

1063

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

Cette page vous a été utile?
0 / 5 - 0 notes