2016-10-25 4 views
0

Rでインポートしようとする.txtファイルが非常に多数あります。 txtファイルは空ですが、私はまだdata.frameに含めたいと思っています.txtファイルは特に空です。次の関数で、私は、リストに必要なすべての.TXT、ファイルをインポートすることができます。大量の.txtファイルをdata.frameにインポートし、空の.txtファイルに行data.frameを付けてインクルードします。

file_list <- list.files() 
myList <- lapply(file_list, function(x) {tryCatch(read.table(x, header = F, sep = '|'), error=function(e) NULL)}) 

しかし、私は次のコードでdata.frameにこのリストを変更する場合:私は失う

myDataframe <- rbind.fill(lapply(myList, function(f) {as.data.frame(Filter(Negate(is.null), f))})) 

どの.txtファイルが空であったかに関する情報

最終的には、各行に.txtファイルの名前が列に追加されます(例:list.files())。そのようにして、どの行が空であるかを確認することができました。

+0

感謝を空のファイルを収容できるようmodifedと:)に沿って考えて! –

+0

誰かが同じ問題に遭遇した場合、次のことが私のために働いた: ライブラリ(plyr) #data.frameを作成し、参加者1人あたりのボタンの数を数える: file_list < - list.files()#すべての.txtファイルを含むリストを作成する myData < - lapply(file_list、function(x){#import info .txt-files into list tryCatch(read.table(x、header = F、sep = '|'))) 件数< - sapply(myData、NROW)#リストごとにすべての行を数えてください Rdata <-data.frame(file_list、count)#saveをインクルードする行数 –

答えて

1

これは問題の解決策ですが、質問に対する回答は特にありません。

テキストファイルのサイズによって異なります。 data.tableに切り替えることを検討する必要があります。大容量のファイルを迅速かつ効率的に処理するための優れたシステム。

install.packages("data.table") 
library(data.table) 
file_list <- list.files() 

Results <- NULL 
for (i in file_list){ 
    # data.table command to read txt files 
    i.file <- tryCatch(fread(i,colClasses="character"), error=function(e) e) 

    if(!class(i.file)[1]=="data.table"){ 
    # This condition checks that no errors occured 
    i.file <- data.table(cbind(txt.file=i,is.empty="YES", 
         message=i.file$message)) 
    } else if(nrow(i.file)==0){ 
    # Just in case files are still empty even though no error 
    i.file <- data.table(cbind(txt.file=i,is.empty="YES", 
         message=NA)) 
    } else { 
    i.file[,txt.file:=i] 
    i.file[,is.empty:="No"] 
    } 
    Results <- rbind(Results,i.file,fill=TRUE) 
    rm(i.file);gc() 
} 

# to find which files are empty 
Results[is.empty=="YES"][,txt.file] 
# double check error types 
Results[is.na(message)][,message] 
# expect all to be something like 'file is empty' 

# if you insist on using data.frames 
Results <- data.frame(Results) 

これはうまくいくはずです。スクリプトはlapplyで動作する関数に変換されるかもしれませんが、理解して一般化するのは簡単です。

また、私はdata.tableの巨大なファンであり、それに移行することは本当に役に立ちました。パッケージの詳細については、cheatsheetをご覧ください。

EDIT:スクリプトは、それが空白にお時間を事前に

+0

助けてくれてありがとう! "fread(i、colClasses =" character "、verbose = TRUE)のエラー: 入力が空白またはスキップまたは自動起動後に完全空白の場合、verbose = TRUEで再度実行してください。 –

+0

このエラーは、空のファイルが完全に空でないために発生します。空白が含まれているため、このエラーが発生します。 – JustGettinStarted

+0

空でないファイルあなたが期待している行と列の数は、どちらかが1より大きい場合は上記の編集済みスクリプトが有効です。 – JustGettinStarted

関連する問題