我有一個函數可以在每次迭代時生成一個新行並將其追加到data.frame
。將行追加到R中的數據幀文件中
我需要在每次迭代後將data.frame
保存在磁盤上。但是,不是每次都存儲所有data.frame
,這是時間和資源消耗,我只想將新行添加到data.frame
文件中。
我已使用write.table()
與append = true
但我重複了我的名字。此行的id始終保持爲1.
我有一個函數可以在每次迭代時生成一個新行並將其追加到data.frame
。將行追加到R中的數據幀文件中
我需要在每次迭代後將data.frame
保存在磁盤上。但是,不是每次都存儲所有data.frame
,這是時間和資源消耗,我只想將新行添加到data.frame
文件中。
我已使用write.table()
與append = true
但我重複了我的名字。此行的id始終保持爲1.
爲什麼不嘗試在內存中保留數據幀,直到函數完成其迭代,然後再寫入數據幀一次。要將數據行添加到數據幀中,可以使用rbind(ds, row)
其中ds是數據幀,而行是數據行。 R中rbind功能結合新行的數據幀
如果你必須在每次迭代之後將數據寫入到磁盤,你可以嘗試用sink()
append=true
我不得不承認,我不明白你爲什麼不會先處理數據幀然後保存,但我想你有你的理由。一步一步地處理數據幀肯定是慢的,但我認爲你知道這一點。如果需要逐行處理,可以使用如下結構:
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
使用'sink'是一個大錘,使調試更難 - 我強烈建議不要這樣做。只需打開一個普通文件並將其傳遞給'cat'。 (你甚至不需要打開一個文件,這足以將文件名傳遞給'cat',另外還有'append = TRUE'參數,但這可能會慢很多。) –
非常感謝你的評論,我沒有意識到這一點 - 調試時會遇到什麼樣的麻煩?你知道這些問題的原因是什麼嗎? –
問題在於,在調用'sink()'來恢復輸出重定向之前,控制檯上不會顯示任何內容。所以,如果你試圖調試循環,你不能直觀地檢查任何值。 –
什麼是'ds.rbind'? –
對不起,沒有解釋,請參閱編輯 –
我認爲你正在混合Python語法和R語法,不是嗎? –