我正在尝试批量转换一堆文件,如下所示:
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
(当前正在编写的文件)的值,以便我可以手动检查它,看看数据是否存在任何实际问题。
答案 0 :(得分:1)
tryCatch
最常用于捕获错误,但它也可用于警告。
像
这样的东西 tryCatch(write.csv(<your code>), warning = function(w) print(dtaf))
只要有警告, print(dtaf)
。您可以根据需要制作警告功能,也可以打印出警告,将警告和dtaf
值添加到列表中供以后查看,等等。