【问题标题】:Memory efficient value replacement in a matrix/raster矩阵/栅格中的内存高效值替换
【发布时间】:2013-11-18 21:15:01
【问题描述】:

我正在编辑一组设置在栅格堆栈(列表)中的栅格(或矩阵,如果您愿意的话)。我需要将值 -999 更改为 NA。到目前为止,我发现以下代码在每个单独的栅格上运行,是最节省内存的

r[[15]][r[[15]]==-999]<-NA

s=r[[15]]
s[s==-999]<-NA
gc(reset=T)
r[[15]]=s

我正在替换列表中超过 20 个栅格的值,大约 10 到 15 个我用完了内存。有谁知道更有效的方法吗?

干杯!

【问题讨论】:

  • 下面的解决方案有效吗?

标签: r memory matrix replace raster


【解决方案1】:

你可以使用 calc 来实现这一点...

calc( r , function(x) { x[ x == -999 ] <- NA; return(x) } )

它会返回一个rasterStack(或任何输入)。来自文档:

calc 对于大型对象,calc 将逐块计算值。这意味着 fun 的结果是否正确不应依赖于一次访问 所有 值。

【讨论】:

  • 额外的[] 有什么用?这是stack 包特有的东西,还是其他东西?可以把它变成你想要的一个真正的问题……
  • @SamMason 这是raster 包。它只是获取rasterLayer 中实际值的访问器,它返回这些值的向量。但经过一些额外的测试后,我实际上改变了主意,并认为现在并不需要它,所以感谢您指出这一点!
  • 我看到它出现在包文档中。没有看到其他地方需要的语法,可能是其他语言编程的后遗症?
  • 不,我确实在某个地方的 r-sig-geo 中看到了它,它在某些情况下对我有帮助,但我不记得是什么,没有它似乎也能正常工作。
  • @SamMason 不错的博客网站顺便说一句!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2013-05-20
相关资源
最近更新 更多