【发布时间】:2012-08-07 06:18:16
【问题描述】:
我正在尝试在 R 中将一个大矩阵 (8,000 x 8,000) 绘制为光栅图像。不幸的是,这对于我的 32 位操作系统需要太多内存,所以我将数据绘制为两个 (4000 x 8000 ) 图像,然后重新组合它们。
我看了很多包,都没有找到合适的功能。我知道图像是作为 S4 对象导入的,颜色存储在一个数组中,这意味着 应该 可以将它们组合在一起,但我无法弄清楚。有谁知道如何在 R 中做到这一点? 谢谢
编辑:
数据存储在8000个csv文件中,file1对应矩阵的第一行,file2对应第二行……
示例代码
# get the name of each matrix-row file
# each file is a vector of length 8000, each filei corresponding to matrix row i
a <- list.files()
for(i in 1:4000){
# read the data into R, and combine it with the other rows
matrixRow <- read.table(a[i])
matrixToPlot <- rbind(matrixToPlot, matrixRow)
}
png("test", 4000, 4000)
rasterImage(as.raster(matrixToPlot))
graphics.off()
## identical code for matrix-row 4001, 4002, ...8000
【问题讨论】:
-
你能给出一些你想要做什么的示例代码吗?另外,为什么不将它们绘制为矢量图像,然后在 R 之外对其进行缩放?
-
我添加了一个最小的代码示例。为了澄清一点,矩阵是~1GB,R可以很好地处理。当我调用绘图函数(plot、ggplot、rasterImage)时,绘图函数会在处理数据时创建大型内部对象,这会阻止 R 工作。我假设尝试另存为矢量格式(.png 或 .svg)时也会发生同样的情况
-
欢迎来到 StackOverflow。如果您真的简化示例代码,使其在我的机器上运行并生成两个图像图,我会看一下。例如,构造两个 10x10 的随机数矩阵。由于您知道如何读取文件,因此这不是您的问题的一部分。另外,删除
png()和dev.off()- 这也不是您的问题的一部分。
标签: image r memory concatenation