library(data.table)

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

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

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

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运行APSIM的代码现在是调用不同站点的Met文件请改为调用CSV文件中不同经纬度的土壤信息不考虑Met文件了土壤信息包括6层土壤的SLLL	SDUL	SSAT	SBDM 将CSV文件中所有经纬度的土壤信息均运行一遍并将所有运行保存在新的CSV文件中librarydatatable#链接apsimexeapsim_exe - DAPSIMAPSIM710-r4158ModelAPSI

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

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