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

R循环中tryCatch跳过缺失文件,无法记录缺失i/j组合问题排查

问题原因与解决方案

问题根源

你的代码里,tryCatch的error回调函数是独立的局部作用域,函数内部的missing_df是局部变量,和全局环境定义的missing_df不是同一个对象。所以回调里执行的bind_rows操作只在函数内部生效,不会同步到全局的missing_df中。

解决方法

在回调函数里使用全局赋值运算符<<-,强制修改全局环境中的missing_df:

修改后的完整代码:

library(readxl)
library(tidyverse)

df <- data.frame() # 存储导入数据的空数据框
missing_df <- data.frame(i = numeric(), j = numeric()) # 存储缺失记录的空数据框

for (i in 1:4){
  
  for (j in 1:3) {
    
    tryCatch({
      
      out <- read_xlsx(paste0("C:\\test\\File_", i, j, ".xlsx"))
      df <- bind_rows(df, out)
      
    },
    
    error = function(e) {
      
      message(paste0("The following do not exist: i = ", i, ", j = ", j))
      # 使用<<-赋值给全局环境的missing_df
      missing_df <<- bind_rows(missing_df, data.frame(i = i, j = j))
      
    }
    )
    
  }
}

补充说明

<<-会在当前作用域的上层环境中寻找目标变量,直到找到全局环境为止,这样就能确保修改的是最初定义的missing_df数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:22:10