반응형
복사하지 않고 데이터 프레임을 data.table로 변환
대용량 데이터 프레임(수 GB 단위)을 사용하여 A로 변환하고자 합니다.data.table.사용.as.data.table데이터 프레임의 복사본을 만듭니다. 즉, 사용 가능한 메모리가 데이터 크기의 두 배 이상이어야 합니다.사본 없이 변환할 수 있는 방법이 있습니까?
다음은 간단한 예입니다.
library(data.table)
N <- 1e6
K <- 1e2
data <- as.data.frame(rep(data.frame(rnorm(N)), K))
gc(reset=TRUE)
tracemem(data)
data <- as.data.table(data)
gc()
출력 포함:
library(data.table)
# data.table 1.8.10 For help type: help("data.table")
N <- 1e6
K <- 1e2
data <- as.data.frame(rep(data.frame(rnorm(N)), K))
gc(reset=TRUE)
# used (Mb) gc trigger (Mb) max used (Mb)
# Ncells 303759 16.3 597831 32.0 303759 16.3
# Vcells 100442572 766.4 402928632 3074.2 100442572 766.4
tracemem(data)
# [1] "<0x363fda0>"
data <- as.data.table(data)
# tracemem[0x363fda0 -> 0x31e4260]: copy as.data.table.data.frame as.data.table
gc()
# used (Mb) gc trigger (Mb) max used (Mb)
# Ncells 304519 16.3 597831 32.0 306162 16.4
# Vcells 100444242 766.4 322342905 2459.3 200933219 1533.0
o 이 S.O. 포스트를 따라서, 함수.
setDT현재 구현된 것은 A.A.를 수행합니다.list(이름 있음 및/또는 이름 없음),data.frame(또는data.table)을 입력으로 하여 a와 동일한 객체를 반환합니다.data.table참고로 (복사본 없이). 참조?setDT더 많은 것들을 위한 예들.
이는 다음과 같습니다.data.table명명 규칙 - 모두set*함수는 참조로 수정합니다.:=는 참조로 수정하는 유일한 다른 방법입니다.
require(data.table) # v1.9.0+
setDT(data) # converts data which is a data.frame to data.table *by reference*
오래된(현재는 구식인) 답변은 기록을 참조하십시오.
언급URL : https://stackoverflow.com/questions/20345022/convert-a-data-frame-to-a-data-table-without-copy
반응형
'codememo' 카테고리의 다른 글
| JSON_EXTRACT가 mysql 5.7.22의 mysql에 없습니다. (0) | 2023.09.10 |
|---|---|
| Excel 파일 다운로드 오류 대응 (0) | 2023.09.10 |
| 데이터베이스에서 순위 읽기 및 C#에서 증분하기 (0) | 2023.09.10 |
| 문자열 값으로 열거형을 정의하는 방법은? (0) | 2023.09.10 |
| mysqdump는 이진 데이터를 안정적으로 처리합니까? (0) | 2023.09.10 |