“绘制矩阵”;“按部分”;在R?

“绘制矩阵”;“按部分”;在R?,r,histogram,R,Histogram,我有一个50k×50k的正方形矩阵保存在一个文本文件中的磁盘上,我想生成一个简单的直方图来查看矩阵中值的分布 显然,当我尝试使用read.table()在R中加载矩阵时,会遇到内存错误,因为矩阵太大。我是否可以一次加载一个较小的子矩阵,但仍然生成一个考虑原始矩阵所有值的直方图?我确实可以加载更小的子矩阵,但我只是用新子矩阵的分布覆盖上一个子矩阵的直方图。这里有一种方法。我没有所有的细节,因为您没有提供示例数据或预期的输出,但有一种方法是通过readr包中的read\u chunked\u csv

我有一个50k×50k的正方形矩阵保存在一个文本文件中的磁盘上,我想生成一个简单的直方图来查看矩阵中值的分布


显然,当我尝试使用
read.table()
在R中加载矩阵时,会遇到内存错误,因为矩阵太大。我是否可以一次加载一个较小的子矩阵,但仍然生成一个考虑原始矩阵所有值的直方图?我确实可以加载更小的子矩阵,但我只是用新子矩阵的分布覆盖上一个子矩阵的直方图。

这里有一种方法。我没有所有的细节,因为您没有提供示例数据或预期的输出,但有一种方法是通过readr包中的
read\u chunked\u csv
函数。首先,您需要编写总结函数,然后将其应用于每个区块。请参见下面的完整重复


# Call the Required Libraries
library(dplyr)
library(ggplot2)
library(readr)

# First Generate Some Fake Data
temp <- tempfile(fileext = ".csv")

fake_dat <- as.data.frame(matrix(rnorm(1000*100), ncol = 100))
write_csv(fake_dat, temp)



# Now write a summarisation function
# This will be applied to each chunk that is read into
# memory
summarise_for_hist <- function(x, pos){
  x %>% 
    mutate(added_bin = cut(V1, breaks = -6:6)) %>% 
    count(added_bin)
}

# Note that I manually set the cutpoints or "breaks"
# argument. You would need to refine this based on your
# data and subject matter expertise

# A

small_read <- read_csv_chunked(temp, # data
                               DataFrameCallback$new(summarise_for_hist),
                               chunk_size = 200 # number of lines to read
                               )

这将产生以下结果:


您可以为直方图设置切点,为每个块计算每个切点的数量,然后循环保存每个切点的计数。总结这些并制作一个简单的条形图

# Generate our histogram by combining all of the results
# and plotting

small_read %>% 
  group_by(added_bin) %>% 
  summarise(total = sum(n)) %>% 
  ggplot(aes(added_bin, total))+
  geom_col()