Data.table: [خطأ]٪ في عبارة٪ يفشل إذا كانت الفئة تحتوي على كل من الأحرف الصغيرة والكبيرة

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

في الإصدار 1.11.2 ، عند استخدام الكشوف %in% و & معًا ، لا يحترم %in% العامل الذي يبدأ بحرف كبير. هنا مثال:

install.packages('data.table')
packageVersion("data.table")   # ‘1.11.2’
data("iris")
library(data.table)
iris <- data.table(iris)
iris$grp <- c('A', 'B')

[قضية]
بعد كتابة الحرف الأول بحرف كبير في "virginica" ، لا يمكن إرجاع عبارة %in% إلى كلا المجموعتين عند استخدام كشف حساب & ، انظر أدناه:

iris[, Species1 := factor(Species, levels = c('setosa', 'versicolor', 'virginica'), labels = c('setosa', 'versicolor', 'Virginica'))]

iris[Species1 %in% c('setosa', 'Virginica') & grp == 'B', table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 0          0         25 

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

iris[Species1 %in% c('setosa', 'versicolor') & grp == 'B', table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 25         25          0 

أو ، إذا أضفت أقواسًا إلى أي من العبارتين ، فسيتم العثور على كلا المجموعتين.

iris[(Species1 %in% c('setosa', 'Virginica')) & grp == 'B', table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 25          0         25 
iris[Species1 %in% c('setosa', 'Virginica') & (grp == 'B'), table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 25          0         25 

لقد جربت هذا البيان بالدالة subset وهو يعمل.

table(subset(iris, Species1 %in% c('setosa', 'Virginica') & grp == 'B')$Species1)
# setosa versicolor  Virginica 
# 25          0         25 

تعمل هذه الميزة في إصدار أقدم من حزمة data.table (استخدم الإصدار 1.10.4-3 كمثال هنا):

devtools::install_version("data.table", version = "1.10.4-3", repos = "http://cran.us.r-project.org")

packageVersion("data.table")   # ‘1.10.4.3’
data("iris")
library(data.table)
iris <- data.table(iris)
iris$grp <- c('A', 'B')

iris[, Species1 := factor(Species, levels = c('setosa', 'versicolor', 'virginica'), labels = c('setosa', 'versicolor', 'Virginica'))]

iris[Species1 %in% c('setosa', 'Virginica') & grp == 'B', table(Species1)]
# Species1
# setosa versicolor  Virginica 
# 25          0         25 

[معلومات الجلسة]

> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.11.2

loaded via a namespace (and not attached):
[1] compiler_3.4.4 tools_3.4.4    yaml_2.1.18   
bug regression

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

لقد قمت بإنشاء علاقات عامة (آمل) تعمل على إصلاح المشكلة. إنه انحدار تم تقديمه بواسطة أحد ممثلي العلاقات العامة الخاص بي.

ال 6 كومينتر

MarkusBonsch الرعاية لإلقاء نظرة؟ يبدو غريبا

باستخدام verbose = TRUE

Optimized subsetting with index 'grp__Species1'
on= matches existing index, using index
Coercing character column i.'Species1' to factor to match type of x.'Species1'. If possible please change x.'Species1' to character. Character columns are now preferred in joins.

أظن أن هذا يجب أن يكون رسالة على الأقل ، وربما تحذير.

@ ddong63 استخدام %in% للحرف المختلط والعامل هو بالتأكيد شيء يجب تجنبه ، والإكراه على نوع البيانات المناسب قبل استخدام match .

HughParsonage نأمل أن يكون قريبًا ، هناك https://github.com/Rdatatable/data.table/pull/2734 معلق.

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

jangorecki كان على حق. عندما يكون لكلا العمودين نفس نوع البيانات ، سواء كان حرفًا أو عاملًا ، فإنه يعمل بشكل جيد.
نقدر كثيرا انتباهك MarkusBonsch

لقد قمت بإنشاء علاقات عامة (آمل) تعمل على إصلاح المشكلة. إنه انحدار تم تقديمه بواسطة أحد ممثلي العلاقات العامة الخاص بي.

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