2016-01-20 87 views
1

我有一個函數可以在每次迭代時生成一個新行並將其追加到data.frame將行追加到R中的數據幀文件中

我需要在每次迭代後將data.frame保存在磁盤上。但是,不是每次都存儲所有data.frame,這是時間和資源消耗,我只想將新行添加到data.frame文件中。

我已使用write.table()append = true但我重複了我的名字。此行的id始終保持爲1.

回答

3

爲什麼不嘗試在內存中保留數據幀,直到函數完成其迭代,然後再寫入數據幀一次。要將數據行添加到數據幀中,可以使用rbind(ds, row) 其中ds是數據幀,而行是數據行。 R中rbind功能結合新行的數據幀

如果你必須在每次迭代之後將數據寫入到磁盤,你可以嘗試用sink()append=true

+1

什麼是'ds.rbind'? –

+0

對不起,沒有解釋,請參閱編輯 –

+0

我認爲你正在混合Python語法和R語法,不是嗎? –

0

我不得不承認,我不明白你爲什麼不會先處理數據幀然後保存,但我想你有你的理由。一步一步地處理數據幀肯定是慢的,但我認爲你知道這一點。如果需要逐行處理,可以使用如下結構:

sink("output.txt") #open a sink file, will be created in your working directory 
        #if it does not exist yet 
for(i in 1:n){ 
    df[i,]<-operations(input) #create the next data frame row 
    cat(df[i,])     #save that row to output.txt 
    cat('\n')     #create a new line (for the next df-row) 
} 

sink() #closes your sink file 
+0

使用'sink'是一個大錘,使調試更難 - 我強烈建議不要這樣做。只需打開一個普通文件並將其傳遞給'cat'。 (你甚至不需要打開一個文件,這足以將文件名傳遞給'cat',另外還有'append = TRUE'參數,但這可能會慢很多。) –

+0

非常感謝你的評論,我沒有意識到這一點 - 調試時會遇到什麼樣的麻煩?你知道這些問題的原因是什麼嗎? –

+0

問題在於,在調用'sink()'來恢復輸出重定向之前,控制檯上不會顯示任何內容。所以,如果你試圖調試循環,你不能直觀地檢查任何值。 –