2017-03-02 2 views
0

저는 주로 Mac에서 Rstudio를 사용합니다. 최근에는 Windows를 사용해야했습니다. 그러나 unique()이 키를 기반으로 data.table에 고유 한 행을 제공하지 않는다는 것을 알게되었습니다. 다음은 예입니다.유니크는 더 이상 기본값으로 키를 사용하지 않습니다

a=c(2,3,3,3,3,5,6,7) 
b=c("a","a","f","g","a","d","t","l") 
e=data.table(a,b) 
setkey(e, a) 
key(e) # this works fine 
unique(e) 

unique()은 전체 행 (5 행)에 대한 복제본 만 제거합니다. 정확히 동일한 코드가 내 Mac에서 잘 실행됩니다.

+3

두 데이터 테이블 버전이 다르기 때문입니다. Mac의 경우 <1.9.8 버전이지만 Windows의 경우 최신 버전입니다. 제발, '? unique'의 문서를 읽으십시오. "* 기본적으로 모든 열을 사용하고 있으며 최근 data.frame 메소드와의 일관성을 위해 변경되었습니다. <1.9.8 버전에서는 key (x) *가 기본값이었습니다." 그런 다음 자신의 Windows에서'unique (e, by = "a")'를 시도하십시오. –

답변

3

두 데이터 테이블 버전이 다르기 때문입니다. Mac의 경우 < 1.9.8 버전 (여전히 키를 기본값으로 사용함)이 있지만 Windows에서는 최신 버전을 사용합니다 (그렇지 않습니다).

(data.table V1.9.8의 +에서) ?unique에 명시된 바와 같이

:

모든 열 사용되는 기본적으로. 최근에 data.frame 메소드에 대한 일관성이 으로 변경되었습니다. 버전 < 1.9.8 기본 그렇지 않으면 그냥 모든 열을 사용합니다, 지금부터, 당신은 이미 키를 설정 한 경우에도 명시 적으로 by 변수를 지정해야 키 (x)의

의미했다. 구체적인 예를 들어

,이

unique(e, by = "a") 
# a b 
# 1: 2 a 
# 2: 3 a 
# 3: 5 d 
# 4: 6 t 
# 5: 7 l 

를 작동 또는 @Frank 댓글에서 언급 한 바와 같이, 당신은 또한 unique(a, by = key(a))를 사용하여 by PARAM에 키를 지정할 수 있습니다.

+2

예. 이 변경은'by = key()'가 명시 적으로 필요하게 만들어서 나중에 코드의 독자가 그 일이 일어나고 있음을 상기시켜 주기도했다. 이전에는 키를 업스트림에 추가하면 고유 한 동작이 변경된다는 사실을 알아야했습니다. 지금은 더 강력해야합니다. –

관련 문제