如何避免R中循环中有问题的文件?

时间:2015-05-15 10:11:09

标签: r loops

我正在循环使用大量文件,但代码在遇到一个文件出现问题时会停止:

files= paste("C:\\Users\\data_ ", data1$column, "_",  data1$row, ".txt", sep="")
for(i in 1:length(files)){
wf <- read.table(files[i], sep=' ', header=TRUE)
wf=subset(wf, !is.na(scan))

here, for instance, `wf` would be:
[1] date1  date2  scan         
<0 rows> (or 0-length row.names)

do stuf...............
}

所以这里的代码将停止并通过此错误:

Error in data.frame(date = resf$wdDate, obs, mod = daf): 
arguments imply differing number of rows: 0, 1

我希望循环只是忽略这个(有问题的)文件,并且不会在循环中继续进行,而是去读取下一个文件等等

1 个答案:

答案 0 :(得分:1)

使用try( ..code.. )tryCatch( ..code.. )声明。这是我知道解释它的最佳链接,关于异常处理的部分更进一步。

http://adv-r.had.co.nz/Exceptions-Debugging.html

这是一个使用try忽略文件读取错误的简单循环

files <- c("f1","f2","f3")
for (i in 1:length(files)){
  try(
    {
      print(files[i])
      df <- read.csv(files[i])
    },silent=T
  )
}

这是另一个使用tryCatch忽略文件读取错误的文件

 files <- c("f1","f2","f3")  

 for (i in 1:length(files)){
      tryCatch(
        {
          print(files[i])
          df <- read.csv(files[i])
        },
        error = function(c) "error",
        warning = function(c) "warning",
        message = function(c) "message"
      )
    }