Data.table: يمكن أن يؤدي DT [TRUE] إلى مفتاح غير صالح

تم إنشاؤها على ١٣ ديسمبر ٢٠١٨  ·  4تعليقات  ·  مصدر: Rdatatable/data.table

لم أدرك أن DT[TRUE] كان وسيلة لتحقيق نسخة ضحلة. النسخة السطحية مخصصة للاستخدام الداخلي فقط. بفضل @ renkun-ken لتسليط الضوء على هذا في # 3214 ، و # 2254.

  • [x] # 3214
  • [] # 2254

في الإصدار 1.11.8 نرى هذا:

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

يحدث فقط بعد DT[TRUE] ، iiuc ، والتي نأمل أن القوم لم يكتشفوا أو يعتمدوا على الكثير ؟! آمل أن يكون الاستخدام هناك مثل وصف @ renkun-ken لإضافة أعمدة جديدة إلى النسخة الضحلة ، وليس لتغيير الأعمدة الموجودة!

تمت إضافة اختبار جديد 1542.08 في PR # 2313 جاهزًا عندما يتم إصلاح ذلك.

bug

التعليق الأكثر فائدة

نعم ، setkey ، يجب عدم استخدام تغيير الأعمدة الموجودة في النسخة الضحلة حيث لا يتم نسخ الأعمدة نفسها.

ال 4 كومينتر

نعم ، setkey ، يجب عدم استخدام تغيير الأعمدة الموجودة في النسخة الضحلة حيث لا يتم نسخ الأعمدة نفسها.

إذا لم نسمح بعمل نسخة سطحية باستخدام dt[TRUE] فسيتم حل هذه المشكلة تلقائيًا.

في النهاية. لكن في غضون ذلك ، لا يمكننا كسر سير عمل @ renkun-ken.
مزيد من التفاصيل هنا: https://github.com/Rdatatable/data.table/issues/3214#issuecomment -462490046

يمكن إضافة الكود التالي إلى الاختبارات لضمان سلوك النسخ

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)
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات