gpt4 book ai didi

r - 在 R 中释放内存

转载 作者:行者123 更新时间:2023-12-04 14:47:13 24 4
gpt4 key购买 nike

在 R 中,我试图将几组时间序列数据组合并转换为来自 http://www.truefx.com/?page=downloads 的 xts但是,文件很大并且文件很多,所以这导致我的笔记本电脑出现问题。它们存储为 csv 文件,该文件已压缩为 zip 文件。

下载它们并解压缩它们很容易(尽管占用了硬盘驱动器上的大量空间)。

使用新的 fread() 将 350MB 以上的文件用于一个月的数据加载到 R 中是相当直接的。 data.table 中的函数包裹。

完成了一些数据表转换(在函数内部),以便可以轻松读取时间戳并生成中间列。然后将数据表保存为硬盘上的 RData 文件,并将所有对数据表对象的引用从工作区中删除,并得到 gc()在删除后运行...但是在我的事件监视器(从 Mac 运行)中查看 R session 时...看起来它仍然占用了将近 1GB 的 RAM...而且事情似乎有点滞后.. .我打算同时加载几年的 csv 文件,将它们转换为可用的数据表,组合它们然后创建一个 xts 对象,如果仅仅一个月使用 1GB 的 RAM,这似乎是不可行的。

我知道我可以按顺序下载每个文件,转换它,保存它关闭 R 并重复,直到我有一堆 RData 文件,我可以加载和绑定(bind),但希望可能有更有效的方式来做到这一点删除对数据表的所有引用后,您返回的不是“正常”或 RAM 使用的启动级别。有没有比 gc() 更好的清除内存的方法? ?任何建议将不胜感激。

最佳答案

在我的项目中,我不得不处理许多大文件。我按照以下原则组织了例程:

  • 在单独的 R 中隔离需要大量内存的操作脚本。
  • 在执行后销毁的新进程中运行每个脚本。因此系统将使用过的内存归还。
  • 通过文本文件将参数传递给脚本。

  • 考虑下面的玩具示例。

    数据生成:
    setwd("/path/to")
    write.table(matrix(1:5e7, ncol=10), "temp.csv") # 465.2 Mb file

    奴隶.R - 内存消耗部分
    setwd("/path/to")
    library(data.table)

    # simple processing
    f <- function(dt){
    dt <- dt[1:nrow(dt),]
    dt[,new.row:=1]
    return (dt)
    }

    # reads parameters from file
    csv <- read.table("io.csv")
    infile <- as.character(csv[1,1])
    outfile <- as.character(csv[2,1])

    # memory-hungry operations
    dt <- as.data.table(read.csv(infile))
    dt <- f(dt)
    write.table(dt, outfile)

    大师.R - 在单独的进程中执行从站
    setwd("/path/to")

    # 3 files processing
    for(i in 1:3){
    # sets iteration-specific parameters
    csv <- c("temp.csv", paste("temp", i, ".csv", sep=""))
    write.table(csv, "io.csv")

    # executes slave process
    system("R -f slave.R")
    }

    关于r - 在 R 中释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450039/

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