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