일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 우분투
- GNN
- dropout
- Crawling
- Graph
- selenium
- pandas
- bayesian
- R
- DATA
- 빅데이터
- 백준
- 논문리뷰
- 텍스트마이닝
- 텍스트분석
- pytorch
- 알고리즘
- 데이터분석
- 리눅스
- 베이지안
- VAE
- 크롤링
- YarinGal
- AI
- 코딩테스트
- 강화학습
- PYTHON
- uncertainty
- 불확실성
- 파이썬
- Today
- Total
끄적거림
data.table 패키지 유용하게 사용하기 2편 본문
지난 번 포스팅 이후로 오랜만에 data.table package에 대해 남은 얘기를 해보도록 하겠다.
3. Channing
data.table 패키지는 chaining을 지원한다.
여기서 chaining이란 전 포스팅에서 봤던 조건, 연산, 그루핑 등을 연쇄적으로 붙여서 사용할 수 있음을 의미한다.
iris[Species == 'setosa'][Sepal.Width > 3]
이 chainning 무한히 연쇄시킬수 있고, 꼭 filtering으로만 사용하는 것이 아니라, 연산, grouping등으로도 사용할 수 있다.
iris.dt[Sepal.Width > 3][, .N, by = 'Species']
4. Merge
data.table 객체는 data.frame 객체보다 merge할때의 성능이 약 400배 정도 차이가 난다고 한다.
그 이유는 첫 번째 포스팅에서도 소개했듯이 key구조를 갖고 있기 때문이다.
5. Cons
위의 성질과 연산을 잘만 이용하면 웬만한 모든 핸들링은 다른 패키지를 사용하지 않고서도 모두 처리가 가능하며, 가장 좋은 것은 그 연산 속도가 엄청나다는 것이다.
하지만, 마냥 좋은 것 만은 아니다.
몇가지 단점들도 존재하는데, 그 중 내가 꼽은 단점은 다음과 같다.
1) pass-by-reference
data.table 객체는 아쉽게도 pass-by-reference의 성질을 가지고 있다.
pass-by-reference라는 것은 간단히 설명하면
아래 그림은 변수(객체) a를 새로 생성할 때 메모리에 어떻게 적재되는지를 살펴보는 그림으로 아래 코드를 실행하면 발생하는 과정이다.
a <- 10
그 다음 아래의 코드를 이용하여 b라는 객체를 생성하면 어떤일이 발생할까?
b <- a
이 경우 두가지 상황이 발생한다.
하나는 객체 a 자체를 참조하는 경우, 다른 하나는 객체 a의 값만 참조하는 경우.
우리는 첫 번째 상황을 pass-by-reference, 두 번째 상황을 pass-by-value라고 말한다.
두 번째 상황의 경우는 크게 문제될 것이 없다.
첫 번째 상황의 경우는 데이터를 다룰 때 꽤나 신중해야한다.
왜냐하면 b를 수정하면 a도 같이 수정되기 때문이다. 한 마디로 연동되어 있다고 생각하면 된다.
iris.dt1 <- data.table(iris)
class(iris.dt1)
iris.dt2 <- iris.dt1
class(iris.dt2)
# > iris.dt1 <- data.table(iris)
# > class(iris.dt1)
# [1] "data.table" "data.frame"
# > iris.dt2 <- iris.dt1
# > class(iris.dt2)
# [1] "data.table" "data.frame"
'R쓸신잡' 카테고리의 다른 글
마크다운 노트 (0) | 2020.07.24 |
---|---|
[R쓸신잡] 문자열 원하는 포멧으로 출력(printf in C) (0) | 2020.07.07 |
[R쓸신잡] benchmark 수행하기 (0) | 2020.06.22 |
[R쓸신잡] directory, path 설정 (0) | 2020.06.20 |
[R쓸신잡] multi package install, import(library), update in R (0) | 2020.06.19 |