في الإصدار 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
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
لقد قمت بإنشاء علاقات عامة (آمل) تعمل على إصلاح المشكلة. إنه انحدار تم تقديمه بواسطة أحد ممثلي العلاقات العامة الخاص بي.
التعليق الأكثر فائدة
لقد قمت بإنشاء علاقات عامة (آمل) تعمل على إصلاح المشكلة. إنه انحدار تم تقديمه بواسطة أحد ممثلي العلاقات العامة الخاص بي.