Tôi có một khung dữ liệu lớn (theo thứ tự vài GB) mà tôi muốn chuyển đổi thành a data.table
. Việc sử dụng as.data.table
sẽ tạo ra một bản sao của khung dữ liệu, có nghĩa là tôi cần bộ nhớ khả dụng có kích thước ít nhất gấp đôi dữ liệu. Có cách nào để thực hiện chuyển đổi mà không cần bản sao không?
Đây là một ví dụ đơn giản để chứng minh:
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()
Với đầu ra:
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