月均降水量与树轮数据相关性分析及dcc函数运行报错咨询
降水与树轮相关性分析问题解答
一、数据预处理要求
两类原始数据不能直接用于分析,必须先完成以下预处理操作:
- 时间范围对齐:树轮数据时间跨度为1884-2019年,降水数据仅覆盖1950-2019年,需先截取树轮年表中1950-2019年的重叠时段数据,保证两类数据的年份一一对应,无缺失或错配
- 结构适配treeclim包要求:
- 树轮年表为
dplR输出的chron对象,默认包含年表值、样本量两列,年份存储为行名,需单独提取年表值列,并显式生成年份列转换为标准数据框格式 - 降水数据为年份行、月份列的矩阵,必须新增一列名为
year的数值列存储对应年份,剩余月份列建议统一以变量名+月份的格式命名,如prec1代表1月降水、prec12代表12月降水,不能将年份作为行名使用
- 树轮年表为
二、dcc函数报错解决方案
报错原因
Error in is.finite(if (is.character(from)) from <- as.numeric(from) else from) : default method not implemented for type 'list'报错的核心原因是传入dcc函数的chrono或climate参数的数据结构不符合要求:
- 直接传入了完整的chron对象,包含多列数据+行名年份,被函数识别为列表类型无法解析
- 用
read_csv读取的降水数据为tibble格式,未包含显式的year数值列,或存在非数值类型的列,导致函数无法识别时间范围
修复代码
按以下步骤修改代码即可正常运行:
library(dplR) library(treeclim) library(TRADER) library(utils) library(ggplot2) library(graphics) library(readr) # 原有树轮数据处理流程 chaf28o6 <- read.rwl("F:/Obby/PhD/untitled folder/Dendrochronology/all/AF28OFINAL/chaf28o6.rwl") rwl.report(chaf28o6) plot(chaf28o6, plot.type="spag") chaf28o6.rwl <- detrend(rwl = chaf28o6, method = "Friedman") rwl.stats(chaf28o6[1:17]) chaf28o6.crn <- chron(chaf28o6.rwl, prefix = "CAM") # 新增:树轮年表格式转换,提取年表值+显式生成年份列 chaf28o6.crn_df <- data.frame( year = as.numeric(rownames(chaf28o6.crn)), cam_crn = chaf28o6.crn$CAMstd # 若使用残差年表可替换为CAMres ) # 新增:降水数据格式转换,转为普通数据框避免tibble结构问题 clim <- read_csv("Abies2800.csv") clim_df <- as.data.frame(clim) # 请提前确认clim_df第一列为数值型year列,后续列对应1-12月降水,列名格式为prec1~prec12 # 修正后运行dcc函数 resp <- dcc( chrono = chaf28o6.crn_df, climate = clim_df, selection = 1:10, method = "correlation", dynamic = "static", win_size = 35, win_offset = 1, start_last = TRUE, timespan = NULL, var_names = c("prec"), # 与降水列前缀保持一致 ci = 0.05, boot = "std", sb = FALSE )
额外校验项
- 确认树轮和降水数据的
year列数值范围完全重叠,无字符型年份、缺失年份问题 - 确认降水数据除
year列外全为数值类型,无空值或字符值
内容的提问来源于stack exchange,提问作者Obby
相关产品推荐
相关产品推荐

