【问题标题】:How can I read a 63 GB .csv file into RStudio from the Allen Brain Map using R?如何使用 R 从 Allen Brain Map 将 63 GB .csv 文件读入 RStudio?
【发布时间】:2020-11-29 10:57:44
【问题描述】:

使用 RStudio,我正在尝试从 Brain Allen 研究所读取 Gene_expression_matrix.csv 文件,但该文件太大,即使对于具有大量 RAM 的计算机也是如此(我可以访问并在笔记本电脑上尝试过)有 64 GB RAM 和 384 GB RAM 的计算机。有没有人访问过这个文件或任何类似大小的文件?谢谢!

我正在使用此代码:

Gene_expression_matrix <- read.csv("Gene_expression_matrix.csv")

我收到的错误信息是:

Error: cannot allocate vector of size 3.9 Mb

【问题讨论】:

  • 您收到的错误信息是什么?另请查看disk.frame 包,该包用于磁盘数据分析。它确实限制了某些操作,例如回归。所以你也应该阅读他们webpage 上的包文档。
  • 尝试使用data.table::fread(..., nrows=...) 读取子集,看看object.size() 如何随行数缩放。此外,搜索“高性能任务视图 CRAN”以获取用于处理大型和内存不足数据的工具。文件是否压缩在磁盘上?在读入 R 时它应该扩大到其大小的 5 倍,这并不令人震惊......
  • 这是关于检查high-performance task view(尤其是“大内存和内存不足数据”部分)的建议发挥作用的地方。或者上面@Oliver推荐的disk.frame包。
  • @Val,添加到@BenBolker,您体验到许多操作会创建数据副本。您的数据似乎几乎无法放入内存,因此这将导致 R 崩溃。当数据太大而无法放入内存时,生活会变得复杂,这就是为什么存在像disk.frame 这样的包(以及@BenBolker 建议的其他包)。那时,通常有必要留在大数据包环境中。例如。您将希望保留disk.frame 或您选择的任何替代方案,并使用专门为这些对象实现的方法。
  • 视情况而定。我认为disk.frame 确实在某处说它允许使用一般功能。远程调试是一项具有中等挑战性的任务。您是否关注 diskframe.com/articles/ingesting-data.html 并使用 csv_to_disk.frame() ? (对不起,csv_to_disk.frame(path, in_chunk_size = 1e6))?

标签: r bigdata rna-seq


【解决方案1】:

你可以像这样使用disk.frame

library(disk.frame)
setup_disk.frame()

Gene_expression_matrix.df <- csv_to_disk.frame(
   "Gene_expression_matrix.csv",
   outdir = "c:/this/is/where/the/output/is" # specify a path for where you want to save the file
)

如果上述方法失败,请尝试通过指定 in_chunk_size 来限制您读取的数量,这一次只会读取 in_chunk_size 行以限制 RAM 使用。例如

Gene_expression_matrix.df <- csv_to_disk.frame(
   "Gene_expression_matrix.csv",
   outdir = "c:/this/is/where/the/output/is", # specify a path for where you want to save the file
   in_chunk_size = 1e7 # read 10 million rows at a time; adjust down if still runs of out RAM
)

加载数据后,您可以使用 dplyr 动词和一些常用函数来查看数据。看到这个quick start

例如

head(Gene_expression_matrix.df)

我确信 {disk.frame} 可以在这种情况下提供帮助,因为它就是为此而设计的!如果您遇到问题,请提出票here,我会帮助您。

【讨论】:

  • 磁盘框架会胜过 50GB 文件的数据表吗?
  • @Cauder 如果数据可以放入 RAM 则不行。但是 disk.frame 实现了不可能的事情。例如,如果您的数据甚至不适合 RAM
  • 太好了。你介意看一下这个问题吗? stackoverflow.com/questions/63782007/…
【解决方案2】:

试试这个库

library('data.table')
Gene_expression_matrix <- fread("Gene_expression_matrix.csv")

它比read.csv 快得多。

【讨论】:

  • 它确实提前完成了运行,但我收到了以下错误消息:错误:无法分配大小为 4.6 Mb 的向量
猜你喜欢
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 2019-02-18
相关资源
最近更新 更多