2016-06-02 10 views
0

異なるフォルダのtxtファイルをRData形式に変換するループを作成したかったのです。ファイルは同じ名前なので、条件付きで名前を変更して1つのフォルダに保存したかったのです。ループはジョブを実行しますが、すべてのファイルのデータフレームと同じ名前が保存されます。これを行うより良い方法はありますか?異なるデータフレーム名のループでRData形式に変換

for (i in (sprintf("%02d", (seq(from=8, to=15))))) { 
    for (j in 1:4){ 
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt") 
    save <- paste0("data.20", i, ".", j, "kw") 
    save <- read.table(load, sep="|", header=T) 
    save(save, file=paste0("./data-r/data.20", i, ".", j, "kw.RData")) 
    }} 
+0

私は、それはタイプミスでした。毎回異なるファイルが読み込まれますが、問題はdfの名前です... – Mateusz

+1

'save()'で作業中の非標準評価が発生しています。 dfの名前は、保存されているオブジェクトの名前によって与えられます。これは、このループのすべての反復で 'save'と同じです。代わりに 'saveRDS()'を使うか、保存するデータフレームを指定するために 'save()'の最初の引数ではなく2番目の引数を使うことができます。 – Thomas

答えて

0

あなたのコードの次の調整がこのトリックを行うべきだと思います。

for (i in (sprintf("%02d", (seq(from=8, to=15))))) { 
    for (j in 1:4){ 
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt") 
    save <- paste0("data.20", i, ".", j, "kw") 
    assign(x = save, 
      value = read.table(load, sep="|", header=T)) 
    eval(bquote(
     save(.(as.name(save)), 
      file=paste0("./data-r/data.20", i, ".", j, "kw.RData")) 
    )) 
    eval(bquote(rm(.(as.name(save))))) 
    }} 

assign -functionは、ファイルの内容があなたのsave -objectの現在価値に割り当てられていることを保証します。

eval + bquote + .() + as.name建設が作成(および評価)するために使用されるsave -functionへの呼び出し、それはあなたのsave -objectを保存するのではなく、その名に格納されたオブジェクトを保存しないようにsave

最後にrmの使用が含まれているため、作業領域が乱雑になり、ファイルの内容がメモリに詰まることがありません。

関連する問題