在for循环(R)内警告期间获取变量值

Get values of variables during warning inside for-loop (R)

我正在尝试按如下方式批量转换一堆文件:

library(foreign)

for(dtaf in dir(recursive=TRUE,pattern="\.dta$")){
  write.csv(read.dta(dtaf),paste0(substr(dtaf,1,nchar(dtaf)-3),"csv"))
  gc()
}

但是,一旦循环完成,我收到以下警告:

Warning messages:
1: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated
2: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated
3: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated

我想知道是否有办法检索 dtaf(当前正在写入的文件)的值,以便我可以手动检查它并查看数据是否存在任何实际问题。

tryCatch最常用于捕获错误,但也可用于警告。

类似

 tryCatch(write.csv(<your code>), warning = function(w) print(dtaf))

只要有警告就会print(dtaf)。您可以根据需要详细说明警告功能,也可以打印出警告,将警告和 dtaf 值添加到列表中供以后查看等。