替换栅格中的一行

时间:2019-05-04 23:45:59

标签: r-raster

我正在寻找将新值分配给大型栅格的整行的最快方法。

我有一个名为ras的大栅格

> ras
class       : RasterLayer 
dimensions  : 71476, 49933, 3569011108  (nrow, ncol, ncell)
resolution  : 30, 30  (x, y)
extent      : 593235, 2091225, -3314375, -1170095  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs 
data source : C:/Users/smithj/AppData/Local/Temp/RtmpiynZ5N/raster/r_tmp_2019-05-04_232648_206436_44436.grd 
names       : layer 
values      : 0, 255  (min, max)

我有一个长度为n=ncol的向量,称为newvals。我通过不适合与newvals函数一起使用的函数生成了calc,但是在下面的示例中,出于这个问题的目的,它只是随机生成的向量。

#create example values 
newvals<-sample(0:100,49933, replace=TRUE)

我的问题是,如果我想用ras代替newvals的第7023行,是否有比下面的方法更快的方法?

#insert newvals into row 7023 of ras
ras[7023,]<-newvals

我也看过setValues,但它似乎只为整个栅格设置值,而不是栅格的一部分(?)。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您没有提供太多上下文。问题在于您有一个基于文件的大型数据集,因此任何更改都将创建一个新文件(除非您使用update)。

如果需要多次执行此操作,例如逐行,则可以打开一个新文件进行写入,然后逐行写入(请参阅writeStart)。如果只有一排需要更改,请尝试使用raster::update运气。