我是 R 中的 star 包的新手,并且正在尝试弄清楚如何为二维 star 对象(栅格包中的栅格)中的单元格分配新值。使用光栅我可以执行以下操作
\n> library("raster")\n> library('stars')\n> tif = system.file("tif/L7_ETMs.tif", package = "stars")\n> ras<-brick(tif)[[2]] #create raster layer from 2nd layer of multilayer tif\n> ras[1,1:5] #see first 5 values of top row of ras\n[1] 56 57 52 45 52\n> ras[1,1:4] <-100 #replace first 4 values of top row of ras\n> ras[1,1:5]\n[1] 100 100 100 100 52\nRun Code Online (Sandbox Code Playgroud)\n根据 star 包手册中的 st_subset 说明,分配遵循 \xe2\x80\x98x[i]<-value\xe2\x80\x99 但我很难理解 \xe2\x80\x98i\xe2\x80\ 的使用x99 在这种情况下。我失败的尝试如下,但我希望有人可以提供可行的替代方案。
\n> tif = system.file("tif/L7_ETMs.tif", package = "stars")\n> st<-read_stars(tif)[,,,2] #create raster layer from second layer of multilayer tif\n> unlist(st[,1:5,1,]) #see first 5 values of top row of st\nL7_ETMs.tif1 L7_ETMs.tif2 L7_ETMs.tif3 L7_ETMs.tif4 L7_ETMs.tif5 \n 56 57 52 45 52 \n> st[,1:4,1,]<-100 #replace first 4 values of top row of ras\nError in `[<-.stars`(`*tmp*`, , 1:4, 1, , value = 100) : \n unused arguments (alist(1:4, 1, ))\nRun Code Online (Sandbox Code Playgroud)\n非常感谢
\n这些stars值可以通过底层matrix(如果是单频段)或array(如果是多频段)访问和修改,通过r[[1]].
例如:
library(stars)
# Reading 2nd band
tif = system.file("tif/L7_ETMs.tif", package = "stars")
r = read_stars(tif, RasterIO = list(bands = 2))
# Accessing values (as matrix)
r[[1]][20:140,20:30]
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] 65 66 67 64 61 59 56 39 40 40 40
## [2,] 62 56 52 48 44 42 38 41 40 40 40
## [3,] 50 44 41 40 40 39 40 41 43 42 41
## ...
# Modifying values
r[[1]][20:140,20:30] = 100
# Plot
plot(r)
Run Code Online (Sandbox Code Playgroud)