2015-04-06 272 views
1

我想使用R中的read.table讀取文件夾中的很多文本文件,但在這些文本文件之間有一些空白文件,當我使用下面的代碼。如何跳過R中的read.table()中的空白文件R

filenames<-list.files("M:/files/test1",pattern=".txt"); 
datalist<-lapply(filenames,function(name){ 
    read.table(paste("M:/files/test1/",name,sep=""),head=FALSE,stringsAsFactors=FALSE,sep="\t") 
}) 
+0

文件大小謝謝!!也許我沒有清楚地描述我的問題!文本文件存在,但文本文件的內容爲空白。我只是想知道如何在read.table中使用read.table – Cheng 2015-04-06 08:54:58

+0

'錯誤時跳過這些類型的空白文件(way,head = FALSE,stringsAsFactors = FALSE,sep =「\ t」):' no line available in輸入@Pascal – Cheng 2015-04-06 08:56:00

回答

2

要做到這一點,最簡單的方法是添加使用try一個簡單的錯誤醒目的機制:

datalist<-lapply(filenames,function(name){ 
    x <- try(read.table(paste("M:/files/test1/",name,sep=""),head=FALSE,stringsAsFactors=FALSE,sep="\t")) 
    if(inherits(x, "try-error")) 
    return(NULL) 
    else 
    return(x) 
}) 

要看到這個動作,嘗試一個玩具的例子。什麼try確實是返回對象,或在錯誤的情況下,包含錯誤的詳細信息的特殊對象類:

x <- try(stop("Test error")) 
inherits(x, "try-error") 
x 
# [1] "Error in try(stop(\"Test error\")) : Test error\n" 
# attr(,"class") 
# [1] "try-error" 
# attr(,"condition") 
# <simpleError in doTryCatch(return(expr), name, parentenv, handler): Test error> 

對戰,如果你簡單介紹一個錯誤,而不try程序將停止,x將是不確定的:

rm(x) 
x <- stop("Test error") 
# Error: Test error 
x 
# Error: object 'x' not found 

如果裏面的操作try()成功,它只是簡單地返回正確的對象:

x <- try(1) 
x 
# [1] 1 
1

跳過空文件

測試每個文件的大小,並跳過0

for (file in list.files(,"*.txt")){ 
    if (file.size(file) == 0) next 
    print(file) 
}