出现了报错> for (i in seq_along(times)) { + print(dim(new_r)) + print(dim(r)) + new_r[[i]] <- r[[1]] + } [1] 125 265 1 [1] 125 265 1 [1] 125 265 1 [1] 125 265 1 [1] 125 265 1 [1] 125 265 1 Error in .local(x, i, j = j, ..., value) : index should be <= nlayers(x)+1
时间: 2024-03-10 15:48:50 浏览: 57
基于freeRTOS和STM32F103x的手机远程控制浴室温度系统设计源码
这个错误是由于 `new_r` 的第三个维度超过了 `r` 的第三个维度,导致在对 `new_r` 赋值时出现了维度不匹配的错误。你可以使用 `dropLayer()` 函数将 `r` 的多余维度去掉,使其和 `new_r` 的维度一致。
以下是修改后的代码:
```
library(raster)
# 输入路径
in_path <- "E:/LAI/GLASS_LAI/IWEMS_LAI/8118x/"
# 输出路径
out_path <- "E:/LAI/GLASS_LAI/IWEMS_LAI/8118s/"
# 读取第一天的tif文件,并去掉多余的维度
r <- dropLayer(raster(paste0(in_path, "/19810101.tif")))
# 新建一个空白矩阵
new_r <- raster(nrow = nrow(r), ncol = ncol(r), xmn = extent(r)[1], xmx = extent(r)[2], ymn = extent(r)[3], ymx = extent(r)[4], crs = proj4string(r))
# 获取每小时的时间戳
times <- seq(as.POSIXct('2022-01-01 00:00:00'), as.POSIXct('2022-01-09 23:00:00'), by = 'hour')
# 将每小时的值设置为第一天的值
for (i in seq_along(times)) {
print(dim(new_r))
print(dim(r))
new_r[[i]] <- r
}
# 设置时间属性
names(new_r) <- format(times, "%Y-%m-%d %H:%M:%S")
# 导出为tif文件
writeRaster(new_r, filename = paste0(out_path, "/hourly_data.tif"), format = "GTiff", overwrite = TRUE)
```
在读取第一天的tif文件时,使用 `dropLayer()` 函数去掉多余的维度。
在循环中,将 `r[[1]]` 替换为 `r`,这样 `r` 的维度就和 `new_r` 一致了。
阅读全文