R语言计算树木年轮与月降水量相关性及dcc函数报错求助
问题解决指南
报错核心原因
你遇到的Error in x[1, 1]:x[dim(x)[1], 1] : NA/NaN argument报错,主要来自treeclim包dcc函数的输入格式不匹配,常见触发点如下:
- 气候数据的列名不符合要求:
dcc强制要求气候数据的年份、月份列必须为小写的year和month,你当前读取的Prec.csv列名为Year、Month,首字母大写导致函数无法识别时间列,读取时间范围时生成空值触发报错 - 未明确指定气象变量对应关系:你的降水数据列名为
Tp,需要在函数中明确对应,否则函数无法识别要分析的气象变量 - 时间范围未显式指定:虽然你的年表和降水数据有1950-2019的重叠区间,显式指定
timespan可以避免边界值异常
需求实现完整代码
以下代码可以同时满足你提出的两项分析需求:
rm(list = ls()) # 加载所需包 library(dplR) library(treeclim) library(readr) # 读取并处理年轮数据 chaf28o6 <- read.rwl("F:/chaf28o6.rwl") # 去趋势 chaf28o6.rwl <- detrend(rwl = chaf28o6, method = "Friedman") # 构建年表 chaf28o6.crn <- chron(chaf28o6.rwl, prefix = "CAM") Abies2800 <- chaf28o6.crn # 读取并处理气候数据 clim2800 <- read_csv("Prec.csv", col_types = cols(Year = col_number(), Month = col_number(), Tp = col_number())) # 修正列名符合dcc要求 colnames(clim2800) <- c("year", "month", "prec") # -------------------------- # 需求1:1950-2019年树木生长量与月降水量的相关性 # -------------------------- cor_all <- dcc(chrono = Abies2800, climate = clim2800, # 选择所有12个月份的降水 selection = list(prec = 1:12), method = "cor", dynamic = "static", # 显式指定时间范围 timespan = c(1950, 2019), # 指定气象变量名 var_names = "prec", ci = 0.05, boot = "stationary", sb = TRUE ) # 查看结果 print(cor_all) # 绘制相关性图 plot(cor_all) # -------------------------- # 需求2:当年生长量与当年1-10月、前一年度气象变量的相关性 # -------------------------- cor_lag <- dcc(chrono = Abies2800, climate = clim2800, # 负号代表前一年的月份,-12:-1为前一年1-12月,1:10为当年1-10月 selection = list(prec = c(-12:-1, 1:10)), method = "cor", dynamic = "static", timespan = c(1950, 2019), var_names = "prec", ci = 0.05, boot = "stationary", sb = TRUE ) # 查看结果 print(cor_lag) # 绘制相关性图,前一年月份会标注为previous year plot(cor_lag)
额外注意事项
- 如果运行仍报错,可以先执行
range(as.numeric(rownames(Abies2800)))和range(clim2800$year)检查两个数据集的时间范围是否确实存在重叠 - 若降水数据存在缺失值,可以先执行
clim2800 <- na.omit(clim2800)删除缺失行,避免后续计算异常
内容的提问来源于stack exchange,提问作者Obby
相关产品推荐
相关产品推荐

