Saya sedang mengeksplorasi alternatif bagaimana melakukan operasi baris di data.table
dan saya pikir saya telah menemukan bug.
Tiga baris kode ini harus mengembalikan hasil yang sama. Namun, hasil by = .I
tampaknya mengembalikan hasil yang salah.
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 ]
contoh data:
dt <- data.table(V0 =LETTERS[c(1,1,2,2,3)],
V1=1:5,
V2=3:7,
V3=5:1)
Atau, by = .I
akan memberikan kesalahan, meskipun akan lebih baik jika itu berfungsi dengan hadiah i-expression
.
Masalah serupa dengan menggunakan .N
di by
(sekali lagi seseorang mungkin mencoba secara naif - dt[, ..., by = 1:.N]
- meskipun ekspresi khusus ini memberikan kesalahan, itu sebenarnya bukan kesalahan "benar").
Mengapa tidak menambahkan fitur "rowwise" dengan menggunakan by = .I
, yang terdengar intuitif.
Hai @leoluyi ,
perilaku by = .I
setara dengan by = NULL
. Lihat diskusi SO ini https://stackoverflow.com/questions/37667335/row-operations-in-data-table-using-by-i