在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
值添加到列表中供以后查看等。
我正在尝试按如下方式批量转换一堆文件:
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
值添加到列表中供以后查看等。