You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:06:04