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

R语言气候数据趋势测试结果存DataFrame导出Excel报错求助

R气候数据趋势检验导出报错解决方案

报错根因

  • 存储矩阵维度不匹配:预先定义的Result只有100行2列,但mmky()、mkttest()返回的结果包含多个统计字段,且总循环次数(站点数×12个月)远大于100,赋值时维度不匹配直接触发报错。
  • 循环索引逻辑错误:外层k循环和内层站点、月份循环没有绑定关系,多次迭代会重复覆盖同一个位置的存储值。
  • 数据传入格式错误:提取单月序列时返回的是单列数据框,不符合检验函数的输入要求,会返回非预期长度的结果。
  • 冗余绘图占用资源:acf()默认生成统计图,大量循环下会导致程序卡顿甚至崩溃。

修复后可运行代码

# 加载依赖包,推荐用openxlsx替代xlsx,无需Java环境
library(openxlsx)
library(lubridate)
library(dplyr)
library(modifiedmk)

# 读取数据
Wabi <- read.csv("Tmin_17.csv", header = TRUE, sep = ",")
Wabi$Date <- as.Date(Wabi$Date, format = "%m/%d/%Y")
Wabi$month <- month(Wabi$Date)
Wabi$year <- year(Wabi$Date)

# 预先定义年数,根据你的实际数据长度修改
N <- 34
# 用列表存储结果,无需预先定义维度
result_list <- list()
# 计数器,用于给列表赋值
count <- 1

# 遍历所有站点列(第2到17列是站点)
for(j in 2:ncol(Wabi[,!colnames(Wabi) %in% c("month","year")])) {
  site_name <- colnames(Wabi)[j]
  # 计算当前站点的月均值
  Wabi_mon <- Wabi %>% 
    group_by(year, month) %>% 
    summarise(!!site_name := mean(.data[[site_name]], na.rm = TRUE), .groups = "drop")
  
  # 遍历12个月份
  for (i in 1:12) {
    # 提取当前月份的序列,转为向量
    mon_series <- Wabi_mon %>% 
      filter(month == i) %>% 
      pull(.data[[site_name]])
    
    # ACF检验,关闭绘图
    acf_test <- acf(mon_series, lag.max = 1, plot = FALSE)
    # 选择对应的趋势检验方法
    if (abs(acf_test$acf[2]) > abs(((-1 - 1.96*sqrt(N-1))/N) - 1)) {
      test_res <- as.data.frame(t(mmky(mon_series)))
    } else {
      test_res <- as.data.frame(t(mkttest(mon_series)))
    }
    # 添加站点、月份标识
    test_res <- cbind(data.frame(site = site_name, month = i), test_res)
    # 存入列表
    result_list[[count]] <- test_res
    count <- count + 1
  }
}

# 合并所有结果为一个数据框
final_result <- bind_rows(result_list)
# 导出到Excel
write.xlsx(final_result, file = "tmin_trend.xlsx", sheetName = "Sheet1", overwrite = TRUE)

额外说明

如果仍使用原xlsx包导出,只需将library(openxlsx)替换为library(xlsx),write.xlsx参数保持原有写法即可。

内容的提问来源于stack exchange,提问作者Yon Balcha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:24:02