gpt4 book ai didi

r - 将数据框转换为 data.table,无需复制

转载 作者:行者123 更新时间:2023-12-03 05:32:44 24 4
gpt4 key购买 nike

我有一个大型数据框(大约几个 GB),我想将其转换为 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

最佳答案

可从v1.9.0+获得。来自 NEWS :

o Following this S.O. post, a function setDT is now implemented that takes a list (named and/or unnamed), data.frame (or data.table) as input and returns the same object as a data.table by reference (without any copy). See ?setDT examples for more.

这符合 data.table 命名约定 - 所有 set* 函数均通过引用进行修改。 := 是唯一一个也通过引用进行修改的其他变量。

require(data.table) # v1.9.0+
setDT(data) # converts data which is a data.frame to data.table *by reference*
<小时/>

查看历史记录以获取较旧(现已过时)的答案。

关于r - 将数据框转换为 data.table,无需复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20345022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com