library(terra) path1 <- dir('G:/ERA5hr/P/1/', pattern = '*.tif', full.names = TRUE) path2 <- dir('G:/ERA5hr/ZUST/1/', pattern = '*.tif', full.names = TRUE) path3 <- dir('G:/ERA5hr/ut_750/1/', pattern = '*.tif', full.names = TRUE) for (i in 1:length(path1)) { print(path1[i]) # 读取三个.tif文件 p <- rast(path1[i]) zust <- rast(path2[i]) ut <- rast(path3[i]) # 进行计算 file_data <- ifelse(zust > ut, (p / 9.8) * zust ^ 3 * (1 - ut / zust) * (1 + (ut / zust) ^ 2), 0) # 输出为新的.tif文件 output_path <- paste('G:/ERA5hr/Q/Q750/1/', substr(path1[i], 15, 28), '.tif', sep = '') writeRaster(file_data, output_path, overwrite = TRUE, format = "GTiff") }这个代码用if语句还能怎么改
时间: 2024-03-15 17:47:46 浏览: 66
my-terra-token:https://docs.terra.moneydappstutorial
这个代码中使用的是`ifelse()`函数,它可以用来在向量/数组中进行条件判断并返回相应的结果。因为`ifelse()`函数可以同时处理向量/数组的多个元素,所以比`if`语句更加高效和灵活。
如果你想使用`if`语句来代替`ifelse()`函数,可以这样写:
```
library(terra)
path1 <- dir('G:/ERA5hr/P/1/', pattern = '*.tif', full.names = TRUE)
path2 <- dir('G:/ERA5hr/ZUST/1/', pattern = '*.tif', full.names = TRUE)
path3 <- dir('G:/ERA5hr/ut_750/1/', pattern = '*.tif', full.names = TRUE)
for (i in 1:length(path1)) {
print(path1[i])
# 读取三个.tif文件
p <- rast(path1[i])
zust <- rast(path2[i])
ut <- rast(path3[i])
# 进行计算,使用if语句替代ifelse函数
if (zust > ut) {
file_data <- (p / 9.8) * zust ^ 3 * (1 - ut / zust) * (1 + (ut / zust) ^ 2)
} else {
file_data <- 0
}
# 输出为新的.tif文件
output_path <- paste('G:/ERA5hr/Q/Q750/1/', substr(path1[i], 15, 28), '.tif', sep = '')
writeRaster(file_data, output_path, overwrite = TRUE, format = "GTiff")
}
```
在这个代码中,用`if (zust > ut)`代替了`ifelse(zust > ut, ..., 0)`,并在`if`和`else`语句块中分别计算了`file_data`的值。
阅读全文