Data.table: рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ unique.data.table() рдореЗрдВ рдкреНрд░рддрд┐рдЧрдордиред рддрд╛рд▓рд┐рдХрд╛ 1.12.0

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдЬрдире░ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Rdatatable/data.table

# Minimal reproducible example

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ 1.11.8 рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдВрд╕реНрдХрд░рдг 1.12.0 рдореЗрдВ data.table рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд░рд╣рд╛ рд╣реИред рдЯреАрдПрд▓; рдбреАрдЖрд░

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ unique.data.table() рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЙрд▓рдо рдореЗрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдЬреИрд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

uptasticsearch рдХреЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рд╣рдорд╛рд░реЗ рдХреЛрдб рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕реВрдЪрдирд╛ рджреА рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

Forderv рдореЗрдВ рддреНрд░реБрдЯрд┐ (x, by = by, Sort = FALSE, retGrp = TRUE):
by= (2) рдХрд╛ рдХреЙрд▓рдо 2 'рд╕реВрдЪреА' рдЯрд╛рдЗрдк рд╣реИ, рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ

рдЖрдЬ рд░рд╛рдд рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕реНрд░реЛрдд рдорд┐рд▓рд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ unique() рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЙрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдорд╛рдиреВрдВрдЧрд╛ред

1.12.0 рдХреЛ:

someDT <- data.table::data.table(
    col1 = 1:2,
    col2 = list(list(TRUE, FALSE), list(FALSE, TRUE))
)
unique(someDT)

рддреНрд░реБрдЯрд┐ рдЙрдард╛рддрд╛ рд╣реИ

Forderv рдореЗрдВ рддреНрд░реБрдЯрд┐ (x, by = by, Sort = FALSE, retGrp = TRUE):
by= (2) рдХрд╛ рдХреЙрд▓рдо 2 'рд╕реВрдЪреА' рдЯрд╛рдЗрдк рд╣реИ, рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ

рдкрд┐рдЫрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЪрд▓рд╛рдпрд╛:

Rscript -e "remove.packages('data.table')"
wget http://cran.rstudio.com/src/contrib/Archive/data.table/data.table_1.11.8.tar.gz
R CMD INSTALL data.table_1.11.8.tar.gz

рдПрдХ рдмрд╛рд░ рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ v 1.11.8 рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЧрдпрд╛, рддреЛ рдореИрдВрдиреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП R рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛

someDT <- data.table::data.table(
    col1 = 1:2,
    col2 = list(list(TRUE, FALSE), list(FALSE, TRUE))
)
unique(someDT)

рдЕрдкреЗрдХреНрд╖рд┐рдд рдФрд░ рд░рд┐рдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

   col1   col2
1:    1 <list>
2:    2 <list>

рддреЛ рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП Unique.data.table() рдХреЗ рд▓рд┐рдП рджреЛрд╖ рдореЗрдВ рдЧрдпрд╛ рдерд╛ рдХрд┐ . рдмрджрд▓рд╛ рд╣реБрдЖред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 1.11.8 рдФрд░ рдЕрдм рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ forderv() рдХреЗ рджреЛрд╖ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред

рдореБрдЭреЗ forderv() рдХреЗ рджреЛрд╖ рдореЗрдВ рдХреБрдЫ рднреА рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рд▓рдЧрд╛ред

рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдЪреАрдЬрд╝ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ ... "рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ" рдкрд╛рда рдХреА рдЦреЛрдЬ (рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕реЗ)ред рдЗрд╕рдиреЗ рдореБрдЭреЗ forder.c рддрдХ рдкрд╣реБрдБрдЪрд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рджреЛрд╖ рдиреЗ рдореБрдЭреЗ #3124 рддрдХ рдкрд╣реБрдБрдЪрд╛ рджрд┐рдпрд╛ред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣ рдкреАрдЖрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд рд╣реИред рдкреАрдЖрд░ рдкрд░ рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИ рдпрд╛ рдПрдХ рдЬреНрдЮрд╛рдд рдкреНрд░рддрд┐рдЧрдорди рд╣реИ рдЬрд┐рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ data.table рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

# Output of sessionInfo()

рдЖрд░ рд╕рдВрд╕реНрдХрд░рдг 3.5.0 (2018-04-23)
рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо: x86_64-Apple-darwin15.6.0 (64-рдмрд┐рдЯ)
рдХреЗ рддрд╣рдд рдЪрд▓ рд░рд╣рд╛ рд╣реИ: macOS рд╣рд╛рдИ рд╕рд┐рдПрд░рд╛ 10.13.6

рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЙрддреНрдкрд╛рдж: рдбрд┐рдлрд╝реЙрд▓реНрдЯ
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
рд▓реИрдкреИрдХ: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

рд╕реНрдерд╛рди:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

рд╕рдВрд▓рдЧреНрди рдЖрдзрд╛рд░ рдкреИрдХреЗрдЬ:
[1] рдЖрдБрдХрдбрд╝реЗ рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рдЬреАрдЖрд░рдбрд┐рд╡рд╛рдЗрд╕ рдпреВрдЯрд┐рд▓реНрд╕ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдердбреНрд╕ рдмреЗрд╕

рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдФрд░ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ):
[1] рдХрдВрдкрд╛рдЗрд▓рд░_3.5.0 рдЯреВрд▓реНрд╕_3.5.0 yaml_2.2.0 рдбреЗрдЯрд╛.рдЯреЗрдмрд▓_1.12.0

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡рд┐рд╕реНрддреГрдд рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡рд┐рд╕реНрддреГрдд рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдзрдиреНрдпрд╡рд╛рдж @jameslamb! 1.11.8 рдореЗрдВ, рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рднреА рдорд┐рд▓рддреА рд╣реИ рдпрджрд┐ list рдХреЙрд▓рдо рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

# with data.table 1.11.8 : 
DT = data.table(
    col1 = c(1,1),
    col2 = list(list(TRUE, FALSE), list(FALSE, TRUE))
)
unique(DT)
Error in forderv(x, by = by, sort = FALSE, retGrp = TRUE) : 
  Column 2 of 'by' (2) is type 'list', not yet supported

рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореИрдВрдиреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП col1 рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рддрд╛рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП col2 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

v1.12.0+ рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдХреЙрд▓рдо рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЪреЗрдХ рдЕрдк рдХреЛ рд╕рд╛рдордиреЗ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ list рдХреЙрд▓рдо рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдХреБрдЫ рдХреЙрд▓рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП by= рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рд╢рд╛рдпрдж)ред рдЪреВрдВрдХрд┐ list рдХреЙрд▓рдо рдкрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╡реИрд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдмрдЬрд╛рдп рдмрд╛рдж рдореЗрдВ рдЕрдЪрд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрдирд╛ рдЬрдм рдЧреИрд░- list рдореЗрдВ рдбреБрдкреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ

> unique(DT, by="col1")
    col1   col2
1:     1 <list>
> 

рдореИрдВ рд╕рдорд╛рдЪрд╛рд░ рдореЗрдВ рдХреБрдЫ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдПрдХ рд╕реБрдЭрд╛рд╡ рдЬреЛрдбрд╝реВрдВрдЧрд╛...

@mattdowle рдЖрд╣ рдареАрдХ рд╣реИ, рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ! рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

nachti picture nachti  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

st-pasha picture st-pasha  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DavidArenburg picture DavidArenburg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arunsrinivasan picture arunsrinivasan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jangorecki picture jangorecki  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ