2017-04-11 51 views
0

我正嘗試將數以千計的.csv文件讀取到列表中。這些文件用運行號碼f.ex來命名。 file1.csv,file2.csv。偶爾一個文件不存在。當它不存在時,我想爲該列表的元素分配一個佔位符矢量rep(NA,9)。我試過以下循環:使用tryCatch將對象分配給產生錯誤的循環元素

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。該怎麼辦?

+0

的[tryCatch似乎並沒有給我回變量]可能的複製(http://stackoverflow.com/questions/21956031/trycatch -does-not-seem-to-return-my-variable) – nawendt

回答

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) 
    } 
} 
+0

This Works!你能告訴我爲什麼我的代碼不起作用嗎? – DocHoliday

+0

這是因爲一旦發生錯誤,您就會離開tryCatch塊。因此,當文件不存在時,不會讀取行'error = function(e){rep(NA,9)}' – qfazille

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 
} 
+0

這也適用。而且更加緊湊。 – DocHoliday

相關問題