Data.table: data.table 1.12.0 ν˜„μž¬ unique.data.table()의 νšŒκ·€

에 λ§Œλ“  2019λ…„ 01μ›” 30일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: Rdatatable/data.table

# Minimal reproducible example

버전 1.11.8에 λΉ„ν•΄ 버전 1.12.0μ—μ„œ data.table 에 νšŒκ·€κ°€ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. TL;DR

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둜 μ΄λŒμ—ˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ 말할 수 μžˆλŠ” ν•œ, 이 PR이 μœ„ 문제의 μ›μΈμž…λ‹ˆλ‹€. PR에 λŒ€ν•œ μ„€λͺ…이 μ—†μœΌλ―€λ‘œ 이것이 μ˜λ„ν•˜μ§€ μ•Šμ€ λΆ€μž‘μš©μΈμ§€ μ•„λ‹ˆλ©΄ data.table 의 ν–₯ν›„ λ¦΄λ¦¬μŠ€μ—μ„œ μˆ˜μ •λ  μ•Œλ €μ§„ νšŒκ·€μΈμ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

# Output of sessionInfo()

R 버전 3.5.0(2018-04-23)
ν”Œλž«νΌ: x86_64-apple-darwin15.6.0(64λΉ„νŠΈ)
μ‹€ν–‰: macOS High Sierra 10.13.6

맀트릭슀 μ œν’ˆ: κΈ°λ³Έ
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /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] 톡계 κ·Έλž˜ν”½ grDevices utils 데이터 μ„ΈνŠΈ 방법 기반

λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό 톡해 λ‘œλ“œλ¨(μ—°κ²°λ˜μ§€ μ•ŠμŒ):
[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 열에 λŒ€ν•œ uniqueλŠ” μ–΄μ¨Œλ“  μž‘λ™ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ λ‚˜μ€‘μ— list 이 μ•„λ‹Œ ν•­λͺ©μ—μ„œ 쀑볡이 λ°œμƒν•  λ•Œ 였λ₯˜μ— κ°‘μžκΈ° λ†€λΌλŠ” 것보닀 λͺ…μ‹œμ μœΌλ‘œ κ°•μ œν•˜λŠ” 것이 더 λ‚˜μ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

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

NEWS에 λ­”κ°€λ₯Ό μΆ”κ°€ν•˜κ³  였λ₯˜ λ©”μ‹œμ§€μ— μ œμ•ˆμ„ μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€ ...

@mattdowle μ•„, μ•Œκ² μŠ΅λ‹ˆλ‹€! μ‚΄νŽ΄λ³΄κ³  였λ₯˜ λ©”μ‹œμ§€λ₯Ό λͺ…ν™•νžˆ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰