Data.table: يوفر الانضمام مع الفهرس نتائج غير متوقعة إذا كان اسم العمود المفهرس هو بادئة لاسم عمود الصلة

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

تستند هذه المشكلة على سؤالي حول stackoverflow .

بالنسبة لإعداد محدد من جدولي بيانات ، لا تحقق الصلة النتائج التي أتوقعها.

library(data.table)

# In the code below the join does not deliver the result I would expect
DT1 <- data.table(colname=c("test1","test2","test2","test3"), colname_with_suffix=c("other","test","includes test within","other"))
DT2 <- data.table(lookup=c("test1","test2","test3"), lookup_result=c(1,2,3))
DT1[colname_with_suffix == "not found", ]  # automatically creates index on colname_with_suffix
DT1[DT2, lookup_result := i.lookup_result, on=c("colname"="lookup")][]
# PLEASE NOTE: same result with slightly different syntax: DT1[DT2, lookup_result := i.lookup_result, on=c(colname="lookup")][]
# colname  colname_with_suffix lookup_result
# 1:   test1                other         NA
# 2:   test2                 test         NA
# 3:   test2 includes test within         NA
# 4:   test3                other          3


# Expected result:
 # colname  colname_with_suffix lookup_result
# 1:   test1                other          1
# 2:   test2                 test          2
# 3:   test2 includes test within          2
# 4:   test3                other          3

بالنسبة إلى الأشكال التالية ، تعمل الصلة كما هو متوقع. يبدو أن السلوك غير المتوقع أعلاه يحدث فقط ، في حالة وجود فهرس في عمود به اسم عمود هو بادئة اسم عمود الصلة وكلاهما له محتويات نصية متشابهة.

# For all following alternatives the join delivers the correct result

# (a) Same data tables as above, but no index
DT1 <- data.table(colname=c("test1","test2","test2","test3"), colname_with_suffix=c("other","test","includes test within","other"))
DT2 <- data.table(lookup=c("test1","test2","test3"), lookup_result=c(1,2,3))
DT1[DT2, lookup_result := i.lookup_result, on=c("colname"="lookup")][]

# (b) Index on DT2, but completely different values in indexed column than in join column
DT1 <- data.table(colname=c("test1","test2","test2","test3"), colname_with_suffix=c("other","other","other","other"))
DT2 <- data.table(lookup=c("test1","test2","test3"), lookup_result=c(1,2,3))
DT1[colname_with_suffix == "not found", ]  # automatically creates index on colname_with_suffix
DT1[DT2, lookup_result := i.lookup_result, on=c("colname"="lookup")][]

# (c) Index on DT2, similar values in indexed column, but indexed column name is not a prefix of join column name
DT1 <- data.table(colname=c("test1","test2","test2","test3"), x.colname_with_suffix=c("other","test","includes test within","other"))
DT2 <- data.table(lookup=c("test1","test2","test3"), lookup_result=c(1,2,3))
DT1[x.colname_with_suffix == "not found", ]  # automatically creates index on x.colname_with_suffix
DT1[DT2, lookup_result := i.lookup_result, on=c("colname"="lookup")][]

معلومات الجلسة:

# R version 3.3.2 (2016-10-31)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 7 x64 (build 7601) Service Pack 1
# 
# locale:
#     [1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252    LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                    LC_TIME=German_Germany.1252    
# 
# attached base packages:
#     [1] stats     graphics  grDevices utils     datasets  methods   base     
# 
# other attached packages:
#     [1] data.table_1.10.0
# 
# loaded via a namespace (and not attached):
#     [1] tools_3.3.2

يرجى ملاحظة أن نفس السلوك يحدث لـ data.table 1.10.4 و R.Version 3.4.2 تحت Windows وأيضًا Ubuntu Linux 14.04.

bug joins

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

كان هذا إصلاحًا سهلاً (انظر طلب السحب). نشكرك على الإبلاغ عن الخطأ ونأمل أن يتم حل المشكلة الآن.

ال 3 كومينتر

يبدو أن هذا خطأ يستحق الإصلاح. سوف أتعمق فيه وأحاول إصلاحه حسب ما يسمح به وقتي.

كان هذا إصلاحًا سهلاً (انظر طلب السحب). نشكرك على الإبلاغ عن الخطأ ونأمل أن يتم حل المشكلة الآن.

MarkusBonsch لقد قمت للتو بتطبيق data.table واختبرته مع المثالين من سؤال SO المرتبط.

كلا المثالين يعملان الآن كما هو متوقع!

العديد من THX للإصلاح السريع.

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