library(data.table)

读取包含经纬度和土壤信息的CSV文件

soil_info <- fread('path/to/soil_info.csv')

链接apsim.exe

apsim_exe <- 'D:/APSIM/APSIM710-r4158/Model/APSIM.exe'

循环每一组经纬度和土壤信息

for (i in seq(nrow(soil_info))) {

读取模板文件

apsim <- readLines('D:/APSIM_work/scenario_585/SW/chuan_HT33.apsim')

替换经纬度信息

apsim[4] <- gsub('57237', soil_info$ID[i], apsim[4])

修改土壤信息

apsim[645] <- paste0('ZZ01 -1 -1 -1 -1 -1 -1 -1\n', soil_info$SLLL[i], ' ', soil_info$SDUL[i], ' ', soil_info$SSAT[i], ' ', soil_info$SBDM[i], ' -1 -1 -1\n')

生成新的APSIM文件

file_apsim <- paste0('D:/APSIM_work/scenario_585/SW/chuan_HT33_run.apsim') writeLines(apsim, file_apsim)

运行APSIM

system(paste(apsim_exe, file_apsim), wait = TRUE, ignore.stdout = TRUE, show.output.on.console = FALSE)

保存结果文件

file.copy('D:/APSIM_work/scenario_585/SW/chuan_HT33.out', paste0('D:/APSIM_work/result585_radn/SW/HT33/', soil_info$ID[i], '.out'))

print(paste('Finished running for ID', soil_info$ID[i])) }

将所有运行保存在新的CSV文件中

result_files <- list.files('D:/APSIM_work/result585_radn/SW/HT33/', pattern = '.out$', full.names = TRUE) result_data <- lapply(result_files, function(file) {

读取结果文件

result <- fread(file, skip = 2, header = FALSE)

提取需要的数据

data.table(Year = result$V1, Month = result$V2, Day = result$V3, DAP = result$V5, GrainYield = result$V8) })

组合所有结果数据

all_result <- rbindlist(result_data, idcol = TRUE)

将结果数据保存在新的CSV文件中

fwrite(all_result, 'path/to/all_results.csv')

使用R语言调用CSV文件中的土壤信息运行APSIM模型

原文地址: https://www.cveoy.top/t/topic/nB1V 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录