首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >栅格数据:R-无法分配向量的内存问题

栅格数据:R-无法分配向量的内存问题
EN

Stack Overflow用户
提问于 2020-12-10 15:37:44
回答 2查看 335关注 0票数 0

各位,我正试图用rayshader包获取一个3D地图,但显然这个文件太大了,无法由RStudio处理。下面是代码的一部分:

(...)

代码语言:javascript
复制
elevation = raster::merge(srtm,srtm2) #works fine
height_shade(raster_to_matrix(elevation)) %>% plot_map() #works fine
 
piecergb <- raster::stack(piece) #works fine

setValues(piecergb, scales::rescale(values(piecergb), to = c(0, 255)))

   Error: cannot allocate vector of size 11.9 Gb

因此,我首先检查了我的RStudio的容量:

代码语言:javascript
复制
memory.size()
[1] 27720.21

memory.limit()
[1] 2e+05 ###this I have previously changed with memory.limit(size=200000)

并调用gc()来清理我的会话。

代码语言:javascript
复制
gc()
            used   (Mb) gc trigger    (Mb)   max used    (Mb)
Ncells   2766617  147.8    4954078   264.6    4954078   264.6
Vcells 404719527 3087.8 3551300168 27094.3 3774733748 28799.0

然后我重新启动我的RStudio,重新定义内存限制,然后再试一次。但我仍然收到同样的错误信息。有人知道该怎么解决这个问题吗?到目前为止,我还没有找到另一个解决方案,无法继续绘制地图。

我的系统信息是:

代码语言:javascript
复制
Sys.info()
       sysname        release        version       nodename        machine          login           user effective_user 
     "Windows"       "10 x64"  "build 18363"        "NSF85"       "x86-64"      "install"      "install"      "install" 

提前谢谢你

阿德里亚纳

EN

回答 2

Stack Overflow用户

发布于 2020-12-10 18:12:58

在这一行中,使用values将Raster* object piecergb中的所有单元格值读入内存,然后使用setValues将它们再次分配给Raster*。

代码语言:javascript
复制
x <- setValues(piecergb, scales::rescale(values(piecergb), to = c(0, 255)))

如果您的数据集很大,这会导致问题。相反,使用光栅包中的方法(这些方法可以避免这个问题)。我认为你所做的相当于

代码语言:javascript
复制
x <- clamp(piecergb, 0, 255)

还请参见?reclassify

票数 0
EN

Stack Overflow用户

发布于 2022-05-15 13:38:25

使用以下代码最大限度地提高内存

代码语言:javascript
复制
library(raster)
rasterOptions(maxmemory = 1e+09)
rasterOptions(tmpdir="temp_files")

祝好运!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65237600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档