我有三个栅格,我想在每个栅格中提取与x (row)= 5 and y (column) = 7
相对应的值,这样我就会得到三个值。
r <- raster(nrows=10, ncols=10)
r <- setValues(r, 1:ncell(r))
r1 <- raster(nrows=10, ncols=10)
r1 <- setValues(r1, 1:ncell(r))
r2 <- raster(nrows=10, ncols=10)
r2 <- setValues(r1, 1:ncell(r))
St=stack(r,r1,r2)
我试过了 提取物(St,c(5,7))
但这给了:
extract(St, c(5, 7))
layer.1 layer.2 layer.3
[1,] 5 5 5
[2,] 4 4 4
我将我的实际文件读作:
dir1<- list.files("/data/datman", "*.img", full.names = TRUE)
for (i in 1:697) {
conne <- file(dir1[i], "rb")
file<- readBin(conne, numeric(), size=4, n=500*1000, signed=T)
file <- raster(t(matrix((data= file), ncol=500, nrow=1000)))}
任何帮助?
答案 0 :(得分:3)
你可以尝试
sapply(St@layers, function(x) cellFromRowCol(x,5,7))
或使用unstack
sapply(unstack(St), function(x) cellFromRowCol(x,5,7))
根据新信息,您可以尝试
dir1<- list.files("/data/datman", "*.img", full.names = TRUE)
rasters <- vector('list', 697)
for (i in 1:697) {
conne <- file(dir1[i], "rb")
file<- readBin(conne, numeric(), size=4, n=500*1000, signed=T)
rasters[[i]] <- raster(t(matrix((data= file), ncol=500, nrow=1000)))}
sapply(rasters,function(x) cellFromRowCol(x,5,7))
答案 1 :(得分:2)
这应该可以解决问题:
如果您要制作要分组的RasterLayer对象列表:
rasters=mget(c('r',paste0('r',1:n))) # n = number of rasters
(请注意,如果您继续使用您在问题中显示的r,r1,r2,r3等格式,这将有效。如果您确实以其他方式命名,则必须对其进行修改)。
然后:
sapply(rasters, function(x) getValues(x,5)[7])
根据您的新编辑,此代码应该执行您需要的所有操作:
dir1<- list.files("/data/datman", "*.img", full.names = TRUE)
n <- 697 # number of rasters to combine
rasters <- vector('list', n)
for (i in 1:n) {
conne <- file(dir1[i], "rb")
file<- readBin(conne, numeric(), size=4, n=500*1000, signed=T)
rasters[[i]] <- raster(t(matrix((data= file), ncol=500, nrow=1000)))}
unlist(rasters)
sapply(rasters, function(x) getValues(x,5)[7])