
简介RClimDex 极端气候指数计算软件配套用户手册面向气候科学研究者、气象数据分析人员及气候变化监测方向的学生与科研工作者帮助其在 R 环境中完成极端气候事件指数的计算与分析。压缩包共 1 个文件为 doc 格式的官方用户手册整体约 600KB内容涵盖软件安装与运行、数据质量控制、指数计算流程以及已知问题与 bug 报告说明。附录部分尤为完整列出可用气候指数清单、输入数据格式要求、各指数定义与统计意义并专门讲解阈值和基准期温度指数的计算方法另附 R 在 Windows 环境下的常见问题解答。手册还交代了软件由加拿大环境部气象研究分支开发、经国际气候指数研讨会测试改进的背景便于读者理解其方法学来源。目前已有 3838 人学习适合需要对照官方文档搭建分析流程、查漏补缺的读者参考。1. 极端气候指数计算从 R 1.8.4 到 RClimDex 1.0 的版本坑有个做气象数据的朋友找我救急说 RClimDex 死活加载不出来报错信息翻来覆去就一句“找不到对象”。我远程一看他装的是 R 4.x直接source(rclimdex.r)之后菜单没弹出来控制台倒是刷了一屏警告。这套工具是 2004 年前后定型的手册里白纸黑字写着“在 R 1.84 下开发1.84 或更高版本应该能跑”但“应该”两个字在二十年后的 R 环境里往往要打个折扣。极端气候指数计算这件事卡住人的从来不是算法本身而是 R 版本、TclTk 图形界面、数据格式这三道门槛。这篇笔记按我实际装过几台机器的顺序把 R 环境准备、RClimDex 加载、数据质控、指数计算和装坏之后的排查一次写清适合第一次接触这套工具、手里有一份逐日气象站数据要出 27 个核心指数的开发者照着走。2. 装 R 之前先把版本和依赖定下来R 1.8.4 之后的取舍2.1 为什么不能无脑装最新版 RRClimDex 1.0 的图形界面依赖 TclTk手册里明确说 R 1.9.0 及之后的默认安装已经自带 TclTk更早的版本要单独装。这句话反过来读就是版本越新TclTk 越不用操心但 R 语言本身在 2.x、3.x、4.x 之间改过不少底层行为老脚本里一些写法在新版 R 上会出警告甚至直接失效。我一般不会直接上最新大版本而是选一个“足够新、又离脚本年代不太远”的稳定版。常见做法是 Windows 上装 R 4.1.x 或 4.2.x 的 64 位版本Linux 上用发行版仓库里的 R 4.x先保证 TclTk 随 R 一起到位再谈脚本兼容。具体到版本对照我整理了一张表装之前先对一眼组件手册要求我实际用的说明R 本体1.8.4 或更高4.1.3 / 4.2.2太老的 1.x 现在很难找到安装包TclTk1.9.0 起默认包含随 R 安装包自带早期版本需单独装操作系统Windows 95/98/2000/XP、UnixWindows 10/11、Linux老系统描述仅作参考输入数据ASCII 文本站名.txt同左格式见手册附录 B这张表里最容易被忽略的是 TclTk 那一行。有人在 Linux 上装了个精简版 Rcapabilities()里tcltk返回 FALSE结果source之后菜单窗口根本不出现还以为是脚本坏了。装完 R 第一件事就是验证图形界面能力命令很简单# 检查当前 R 是否具备 TclTk 图形界面能力 capabilities(tcltk) # 返回 TRUE 表示可用FALSE 则需要补装 tcltk 支持capabilities()是 R 内置的环境能力查询函数传tcltk只问图形界面这一项。返回 FALSE 时Windows 上一般是安装时没勾选对应组件重新跑安装包补上即可Linux 上则要装tcl、tk开发包后重新编译或安装带 tcltk 的 R 包。这一步不过后面所有菜单操作都是空谈。2.2 Windows 和 Linux 两条安装路径Windows 下的安装最省事。到 R 项目官网的 CRAN 镜像下载对应版本的 Windows 安装程序双击一路下一步桌面会出现 R 图标。安装过程中留意组件选择页确保 TclTk 相关项处于选中状态。装完双击图标进 R 控制台先跑上面那句capabilities(tcltk)确认。Linux 下我一般走包管理器以 Debian 系为例# 安装 R 本体及 TclTk 图形界面支持 sudo apt update sudo apt install r-base r-base-dev tk tcl # 验证 R 版本与 tcltk 能力 R --version R -e capabilities(tcltk)r-base是 R 本体r-base-dev带上编译扩展需要的头文件tk和tcl是图形界面依赖。最后一行用R -e非交互执行一句检查输出 TRUE 才算齐活。有些发行版的 R 包默认不带 tcltk装完发现是 FALSE那就得换用官方提供的二进制包或者从源码编译时加--with-tcltk参数这一步比较费时间能避开就避开。2.3 工作目录和环境变量 HOME手册里提了一句部分 Windows 机器需要先设置一个叫 HOME 的环境变量否则 R 启动可能出问题。这在老版本 Windows 上更常见现在的系统一般不用管但如果 R 启动时报找不到用户目录、或者图形窗口一闪而过就该怀疑这里。Windows 下在“系统属性 → 环境变量”里新建用户变量HOME值指向一个存在的目录比如C:\Users\你的用户名。Linux 下HOME通常已经存在用echo $HOME确认即可。工作目录同样值得提前定好。RClimDex 运行时会往当前工作目录下写log、indices、plots三个子目录如果工作目录没有写权限质控跑完什么文件都留不下。我习惯在装完 R 后先建一个专用目录把rclimdex.r和数据文件都放进去再在 R 里setwd()过去# 设定工作目录后续 log/indices/plots 都生成在这里 setwd(D:/climate/rclimdex_work) getwd() # 回显确认路径无误setwd()只影响当前会话关掉 R 就失效。想每次启动都自动定位Windows 下可以改 R 快捷方式的“起始位置”Linux 下写进.Rprofile。路径里尽量别带中文和空格老脚本对这类路径的处理不太稳这是踩过坑之后的习惯。3. 加载 RClimDex 与数据质控source 那一步最容易翻车3.1 用 source 加载脚本而不是 install.packages这里有个流传很广的误区网上不少资料写install.packages(RClimDex)再library(RClimDex)。按手册的原始做法RClimDex 1.0 根本不是以 R 包形式分发的它就是一个rclimdex.r脚本文件用source()加载进当前会话。你如果在 CRAN 上找不到这个包不是网络问题是它本来就不在那儿。正确姿势是把脚本文件放到工作目录然后在 R 控制台执行# 加载 RClimDex 脚本路径按实际存放位置调整 source(rclimdex.r) # 若脚本不在当前工作目录写全路径例如 # source(D:/climate/rclimdex_work/rclimdex.r)source()的作用是逐行执行指定文件里的 R 代码脚本执行完会把 RClimDex 的主菜单函数注册进当前环境随后弹出图形菜单。执行成功的话控制台不会有明显输出但会跳出一个菜单窗口如果只看到提示符回来、没有任何窗口基本就是脚本没找到或者执行中途报错。Windows 下还有一条等价路径R 菜单栏 File → Source R code在弹出的文件选择框里挑rclimdex.r效果一样适合不习惯敲命令的人。加载失败时先看控制台有没有红色报错。最常见的是cannot open file rclimdex.r: No such file or directory说明工作目录不对用getwd()看一眼当前在哪再setwd()过去。另一种是脚本执行到一半报某个函数不存在多半是 R 版本太新导致老写法失效这时候别硬扛换一个稍旧的 R 版本往往比改脚本省事。3.2 输入数据格式站名.txt 和 -99.9 的约定质控之前数据文件必须符合手册附录 B 的格式。文件名形如stationname.txt内容是逐日的 ASCII 文本缺失值统一编码为-99.9。手册演示用的是21946.txt列的顺序大致是年、月、日、日降水量、日最高温、日最低温。格式错一个字段加载阶段就会在控制台抛错误信息手册原话是“通常由输入数据格式错误引起请对照示例数据检查”。我一般会先拿一小段数据做格式自检用 R 读进来看看列数和缺失值编码对不对# 快速检查输入文件格式列数、前几行、缺失值编码 dat - read.table(21946.txt, header FALSE) dim(dat) # 应为 6 列年 月 日 降水 最高温 最低温 head(dat, 3) # 看前 3 行结构 sum(dat[, 4] -99.9) # 统计降水缺失值个数确认编码一致read.table默认按空白分隔header FALSE表示文件没有表头。dim返回行列数列数不对说明字段分隔或缺失列有问题head看结构是否符合预期最后一行统计-99.9出现次数如果明明是缺失值却统计为 0说明编码写成了别的值质控阶段会把它当成真实观测参与计算结果就偏了。这一步花不了一分钟能省掉后面反复重跑质控的时间。3.3 质控参数 n 的取值与四个输出文件从主菜单选“Load Data and Run QC”选好数据文件后会弹出一个参数窗口核心参数是那个 n默认值 3。它的含义是某日温度值落在“该日气候平均 ± n 倍标准差”之外就被标记为离群值。手册自己都提醒n 取 3 可能标记出非常多的值建议从 4 开始试。我的经验是先用 4 跑一遍看tepstdQC.csv里被标记的数量如果多到明显不合理再往上调反之如果几乎没标记、但数据本身看着有毛刺可以降到 3 复查。质控跑完工作目录下会生成log子目录里面是四个 CSV 和四个 PDF文件内容用途站号tempQC.csv温度中的不合理值检查最高温低于最低温等情况站号prcpQC.csv降水中的负值检查小于 0 的降水量站号tepstdQC.csv温度离群值及日期人工判断是否真离群站号indcal.csv质控后的数据后续指数计算的输入四个 PDF降水、最高温、最低温、日较差的时序图缺失值以红点标出肉眼扫一眼这里有个关键细节手册专门强调过indcal.csv里只把缺失值和不合理值替换成 NA被标记的离群值并没有被改动。也就是说离群值标归标算指数时照样用原值。如果你判断某个离群值确实是错误观测得手动改indcal.csv改完还要重新跑一遍质控流程改动才会反映到指数里。原始输入文件全程不被修改这一点设计得挺稳妥等于留了后悔药。4. 指数计算与参数设置基准期、纬度和四个自定义阈值4.1 基准期年份和半球纬度的填写规则质控完成后选“Indices Calculation”先弹参数窗口。要填的第一组是基准期的起始年和结束年阈值类指数比如冷夜、暖夜这种基于百分位的都依赖这段基准期来定分位点。填的时候注意基准期必须落在数据覆盖范围内而且不能和数据起始年重合——这是手册第 4 节明确写的已知 bug后面排查章节会细说。第二组是站点纬度南半球填负值。这个参数决定生长季长度GSL这类指数按哪个半球的日历年切分北半球按 1 月 1 日到 12 月 31 日南半球按 7 月 1 日到次年 6 月 30 日。纬度填错不会报错但 GSL 的结果会整体错位属于那种“跑得通但结果不对”的隐蔽坑填完最好核对一眼站点实际位置。4.2 四个温度阈值和降水阈值 P 怎么定参数窗口里还有五个用户自定义阈值一个降水阈值 P单位毫米对应 Rnn 指数统计日降水量超过 P 的天数四个温度阈值分别对应 SUmm、FDmm、TRmm、IDmm 四个指数mm 就是你填的数值。手册对这四个温度阈值的描述是日最高温上限、日最高温下限、日最低温上限、日最低温下限分别统计超过上限、低于下限的天数。这几个值没有标准答案取决于研究区域的气候背景。我一般会参考当地气候常年值来定比如夏季高温明显的地区日最高温上限可以设在 35 度左右冬季有霜冻的地区日最低温下限设在 0 度附近对应霜冻日。降水阈值 P 常见取 1 毫米或 10 毫米前者统计有降水日后者统计较强降水日。填完之后点 OK程序会做一轮数据处理慢机器上要等几秒到几分钟别以为卡死了就强退。4.3 选择指数并读懂 indices 和 plots 两个输出目录参数设完弹出指数选择窗口27 个核心指数默认全选。实际研究里往往只需要其中一部分把不需要的取消勾选能明显缩短计算时间尤其是百分位类指数涉及 bootstrap逐个算下来不便宜。选完点 OK 开始计算完成后弹提示窗口。结果分两处存放。indices子目录下是 Excel 格式的 CSV命名规则是站号_指数名.csv逗号分隔每个文件是一条指数的时间序列。plots子目录下是对应的 JPEG 图文件名规则相同只是后缀换成 jpg图里画了年序列、线性最小二乘拟合的实线趋势、局部加权回归的虚线趋势还把线性拟合的统计量标在图上。想给同一站点补算几个指数重新选“Indices Calculation”即可换站点则回到“Data QC”从头走一遍。全部算完选“Exit”退出。5. 装坏之后的排查五条血泪踩坑记录5.1 现象source 之后没有任何菜单弹出原因脚本文件不在当前工作目录或者 R 缺少 TclTk 支持导致图形窗口无法创建。解决先getwd()确认目录不对就setwd()再capabilities(tcltk)返回 FALSE 就补装 TclTk 组件或换带图形界面的 R 安装包。两条都排除后看控制台有没有被忽略的红色报错逐条读。5.2 现象质控阶段控制台报错提示数据格式问题原因输入文件列数不对、分隔符不对或者缺失值没写成-99.9。解决用 3.2 节那段read.table自检代码核对列数和缺失值编码对照手册附录 B 的示例逐列比对。格式问题没有捷径只能一行行对。5.3 现象数据起始年等于基准期起始年程序直接停住原因手册第 4 节写明的已知 bug百分位类指数计算需要基准期边界之外的数据起始年重合时越界。解决在输入文件最前面补一条基准期开始前一天的记录值全部填缺失例如基准期是 1961 到 1990、数据也从 1961 开始就在首行加1960 12 31 -99.9 -99.9 -99.9。补完重新走质控和计算。5.4 现象指数算出来了但生长季长度明显不对原因纬度符号填反南半球站点填了正值GSL 按北半球日历年切分。解决回到参数窗口把纬度改成负值重算。这类错误不报错只能靠结果合理性反推所以填参数时多核对一眼站点位置。5.5 现象改了 indcal.csv 里的值指数结果没变化原因指数是从质控后的数据算的但改完文件后没有重新执行质控流程程序用的还是旧的内存数据。解决改完indcal.csv后重新选“Load Data and Run QC”跑一遍再进指数计算。手册专门提醒过这一点原始输入文件不受影响改哪份、重跑哪步要分清。6. 装完怎么验证跑通拿演示站数据走一遍全流程验证这套环境是否真的可用我习惯用一份小样本数据从头到尾走一遍而不是只看菜单弹没弹出来。具体做法是准备一个几十行的21946.txt格式样本放进工作目录然后按顺序执行加载、质控、计算三步最后检查输出文件是否齐全、数值是否合理。先验证加载和质控# 全流程验证第一步加载脚本并确认工作目录 setwd(D:/climate/rclimdex_work) source(rclimdex.r) # 菜单出现后选 Load Data and Run QC加载 21946.txt # 参数 n 先填 4点 OK 等待完成 # 完成后检查 log 目录是否生成四个 CSV 和四个 PDF list.files(log)list.files(log)应该回显八个文件名少一个都说明质控没走完整。接着验证指数计算选“Indices Calculation”基准期填数据覆盖范围内的一段纬度按站点实际半球填阈值先给一组常规值指数全选跑一遍。跑完检查两个目录# 全流程验证第二步确认指数与图表输出 length(list.files(indices)) # 应等于所选指数个数 length(list.files(plots)) # 应与 indices 数量一致 # 抽查一条指数序列的首尾值是否落在合理范围 head(read.csv(indices/21946_TXx.csv))indices和plots两个目录的文件数应当一致因为每条指数序列配一张图。抽查一条序列时重点看两点首尾年份是否覆盖数据全段数值量级是否符合该指数的物理含义比如 TXx 是月最高温的最大值不该出现负几十度这种明显异常。如果文件数对不上多半是计算中途出错回控制台看报错如果数值量级离谱回头查质控参数和阈值设置。我还会额外做一次“破坏性验证”故意把输入文件某一列删掉重新加载确认程序能报出格式错误而不是静默算出一堆垃圾。能正确报错说明这套环境的错误处理链路是通的以后真遇到问题才有线索可查。从那以后我每次在新机器上装完 RClimDex都强制走一遍“加载 → 质控 → 计算 → 查文件数 → 抽查数值”这五步不看到indices和plots数量对上、抽查序列量级正常就不算装完。希望帮到你。本文还有配套的精品资源点击获取