使用tryCatch将对象分配给产生错误的循环元素

时间:2017-04-11 20:38:53

标签: r list loops try-catch read.csv

我正在尝试将数千个.csv文件读入列表。文件以运行数字命名,f.ex。 file1.csv,file2.csv。有时文件不存在。如果它不存在,我想为列表中的该元素分配一个占位符向量rep(NA,9)。我尝试过以下循环:

file.numbers = 1:2000
data = list()

for (i in 1:2000) {
  tryCatch(
    data[[i]] = read.csv((paste("file", file.numbers[i], sep = ""))),
    error=function(e){data[[i]] = rep(NA,9)}
  )
}

让我们说file1052.csv不存在。我想data[[1052]] = rep(NA,9),但上面的循环给了我data[[1052]] = NULL。怎么办?

2 个答案:

答案 0 :(得分:0)

您可以使用file.exists

file.numbers = 1:2000
data = list()
for (i in 1:2000) {
  filename <- paste("file", file.numbers[i],".csv", sep = "")
  if(file.exists(filename)){
    data[[i]] = read.csv(filename)
  } else {
    data[[i]] = rep(NA,9)
  }
}

答案 1 :(得分:0)

尝试:

for (i in 1:2000) {
  csv.i <-
  tryCatch(read.csv(paste("file", file.numbers[i], sep = "")),
error=function(e){rep(NA,9)}
  )
data[[i]] <- csv.i
}