【发布时间】:2018-06-28 04:03:43
【问题描述】:
我有 11 个大光栅文件,其中包含大约 314578920 个单元格。其中一些细胞含有 NA。如果其他栅格在该特定单元格中有值,我想将 NA 替换为零。但是在所有栅格中包含 NA 的像元应该是相同的。例如,见下图:
我创建了五个栅格(顶行)来说明我的问题(但实际上我有 11 个栅格)。输出栅格应与底行栅格类似。
将所有 NA 替换为零(即,使用 r[is.na(r[])] <- 0)会使光栅变得如此之大,以至于内存无法处理。或者,省略 NA 不符合我的目的。任何有关如何解决此问题的想法都将受到高度赞赏。
示例代码:
library(raster)
r <- raster(nrow=5, ncol=5) # create empty raster
r[] <- rnorm(length(r)) # assign random values to each cell
r[1:5] <- NA # assign first row with NA
【问题讨论】:
-
我对使用栅格不够熟悉,无法自信地创建示例“栅格对象”来测试代码。你能提供生成一些小栅格的 MWE 代码吗?例如,您的单元格有 314M 并不重要,代码在 10x10 栅格上的效果可能与在 17Kx17K 上一样好。
-
@r2evans 这段代码是否可以解决您的问题:
library(raster) # load library; r <- raster(nrow=5, ncol=5) # create empty raster; r <- rnorm(length(r)) # assign random values to each cell; r[1:5] <- NA # assign first row with NAhead(r) # 查看已创建栅格的几行` -
这是一个好的开始。我将它添加到您的问题中,将来只需自己添加它(cmets 通常在显示简单单行命令之外的代码方面很糟糕)。
-
这是一个栅格,您说您正在将多个与一些相同、一些不同的
NA位置进行比较。您的示例数据确实应该是自给自足的,因此如果您需要栅格列表或单独的对象,则需要创建它们。 -
您知道这种转换发生的频率吗?例如,无论生成什么技术将“some”
NAs 替换为 0,您关于栅格变得 “内存无法处理的大” 的声明都将成为一个因素。也许这是您需要(1)一台更大的计算机的情况; (2) 对算法的更改可以巧妙地处理这些NAs,而无需填充稀疏矩阵;或 (3) 别的东西。