在R中,我正在尝试将几组时间序列数据从http://www.truefx.com/?page=downloads合并并转换为xts格式,但是由于文件很大且有很多文件,这在我的笔记本电脑上引起了问题。它们被存储为已压缩为zip文件的csv文件。
下载和解压它们非常容易(尽管会占用硬盘上很多空间)。
使用
一些datatable的转换是在函数内完成的,以便可以轻松读取时间戳并生成中间列。然后将datatable保存为RData文件到硬盘上,并从工作空间中删除所有对datatable对象的引用,在删除后运行
我知道我可以顺序下载每个文件,将其转换,保存并关闭R,重复此过程直到我有一堆RData文件,然后可以加载和绑定它们,但是希望有一种更有效的方法来做到这一点,以便在删除对datatable的所有引用后,您能够恢复到“正常”或启动时的RAM使用水平。有比
下载和解压它们非常容易(尽管会占用硬盘上很多空间)。
使用
data.table
包中的新fread()
函数将一个月的350MB+文件加载到R中相对直接。一些datatable的转换是在函数内完成的,以便可以轻松读取时间戳并生成中间列。然后将datatable保存为RData文件到硬盘上,并从工作空间中删除所有对datatable对象的引用,在删除后运行
gc()
...但是,当查看我的Activity Monitor(从Mac运行)中的R会话时,它仍然占用了近1GB的RAM...而且事情似乎有点滞后...我打算同时加载几年的csv文件,将它们转换为可用的datatables,将它们组合起来,然后创建一个单独的xts对象,如果只有一个月使用1GB的RAM,这似乎是不可行的。我知道我可以顺序下载每个文件,将其转换,保存并关闭R,重复此过程直到我有一堆RData文件,然后可以加载和绑定它们,但是希望有一种更有效的方法来做到这一点,以便在删除对datatable的所有引用后,您能够恢复到“正常”或启动时的RAM使用水平。有比
gc()
更好的清除内存的方法吗?任何建议将不胜感激。
read.csv
而不是fread
,是否有相同的症状? - GSeex <- read.csv(...)
会将内存使用量提高到1.2GB,然后运行rm(x)
,接着运行gc()
,只能将其降至894MB...仍远远达不到初始启动/初始化R时约75MB的内存使用量。 - h.l.m