Data.table: عمليات الصف في data.table باستخدام `by = .I`

تم إنشاؤها على ٧ يونيو ٢٠١٦  ·  3تعليقات  ·  مصدر: Rdatatable/data.table

كنت أستكشف بدائل حول كيفية إجراء عمليات الصف في data.table وأعتقد أنني وجدت خطأ.

يجب أن تعيد هذه الأسطر الثلاثة من التعليمات البرمجية نفس النتيجة. ومع ذلك ، يبدو أن نتيجة by = .I تعيد نتيجة خاطئة.

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 ]

بيانات العينة:
dt <- data.table(V0 =LETTERS[c(1,1,2,2,3)], V1=1:5, V2=3:7, V3=5:1)

Low bug

ال 3 كومينتر

بدلاً من ذلك ، يجب أن يعطي by = .I خطأ ، على الرغم من أنه سيكون من الجيد أن يعمل مع i-expression الحالي.

مشكلة مماثلة في استخدام .N في by (مرة أخرى قد يحاول شخص ما بسذاجة - dt[, ..., by = 1:.N] - على الرغم من أن هذا التعبير المعين يعطي خطأ ، فهو ليس الخطأ "الصحيح" حقًا).

لماذا لا تضيف فقط ميزة "rowwise" باستخدام by = .I ، والتي تبدو بديهية.

1063

مرحبًا leoluyi ،

سلوك by = .I يعادل by = NULL . ألق نظرة على مناقشة SO هذه https://stackoverflow.com/questions/37667335/row-operations-in-data-table-using-by-i

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات